爬虫-Day1
爬虫相关介绍
爬虫的本质就是模拟客户端请求来获取服务端数据
若无法爬取到想要的数据,因为爬虫模拟的力度不够
通用爬虫:将一个页面中所有的数据都爬取到
聚焦爬虫:建立于通用爬虫之上,针对指定数据爬取(如:图片,标题等)
增量式爬虫:监控网站更新情况,爬取最新的数据
案例应用
需用到requests 模块可通过 :
pip install requests进行下载
东方财富首页数据爬取
通过数据包分析可很轻松的找到的大多数数据存在的数据包,其余的请求可发现都是请求的图片或其他格式

分析此数据包的请求信息,数据包为网站的默认根路径,请求方式为GET (也就是说我们只需要构建一个GET 请求包访问根路径即可)

使用requests 模块进行get 方式请求发送
import requests
#1.指定服务器url
url = "https://www.eastmoney.com/" #2.发送请求:根据指定url发送get 请求,得到响应对象
response = requests.get(url) # 3. 查看响应状态码
print(response.status_code) # 得到响应状态码
200 # 设置获取响应数据的编码格式
response.encoding='utf-8' #4.获取字符串形式的响应数据
data=response.text #5.持久化存储,响应数据存储于caifu.html
with open ('caifu.html','w',encoding='utf-8') as f:
f.write(data)
获取到此响应包数据(这里由于响应包为html 格式所以存储同样为html)

爬取51游戏中任何游戏对应的搜索结果页面数据
首页存在游戏搜索功能,进行搜索的话会新发起新请求
可采用开发者工具进行分析,若对于HTTP 协议较熟悉的话,可直接分析确认为GET 请求,参数为"传奇"

逻辑分析完成,进行爬虫代码块编写
import requests
# 用于动态请求参数的指定
game_name = input("请输入游戏关键字")
url = 'https://game.51.com/search/action/game/'
# 构建字典,用于指定发送参数,
p = {
'q':game_name
}
# 发起get 请求,指定发送参数为q字典中的参数
response = requests.get(url,parmes=p)
page_html = response.text
with open(f"{game_name}.html",'w',encoding='utf-8') as f:
f.wirte(page_html)
成功获取到相应的html 页面

中国人事考试网爬取[UA伪装]
-
UA(User-Agent) 头 :HTTP 协议请求头的一个头部字段,其作用是告知服务器当前浏览器、系统等信息,服务器可针对UA提供服务
反爬机制:采用各种手段,用来检测爬虫程序,并拒绝为其提供服务,其中就存在典型的UA 头检测(requests库默认会使用自己的UA)
反反爬机制:绕过服务器检测的各种手段,进行数据爬出
爬取方式与第一个案例方法一致,这里就不过多赘述了,这里只做差异的演示 ,这里采用无任何反反爬机制的爬取
import requests
url = " http://www.cpta.com.cn"
response = requests.get(url)
data = response.text
with open('人事考试.html','w',encoding='utf-8') as f:
f.write(data)
最终爬取下来的页面内容为,进行分析,推测后端服务器的WAF 规则库存在UA 头的检测
- WAF (应用防火墙): 一种恶意请求的检测手段

进行UA 头伪造,反反爬对方的爬虫检测
import requests
url = " http://www.cpta.com.cn"
# 指定请求头字段中的UA
h={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0"
}
# 指定get请求,且指定请求头为h 字典中字段,发送请求
response = requests.get(url,headers=h)
data = response.text
with open('人事考试.html','w',encoding='utf-8') as f:
f.write(data)
反反爬绕过成功,成功爬取下首页数据(但目前该网站似乎进行了规则库的更新,仅仅UA 头伪造无法绕过)

中国人事考试网(站内搜索post + 请求参数)
进行数据包的分析,分析为POST 请求,请求体参数为 keywords + 固定搜索参数

进行数据包构造,keywords 可为变量,爬取指定内容
keyword={
keywords:变量
"搜 索":"搜 索"
}
构思完成,进行爬虫代码编写
import requests
url = 'http://www.cpta.com.cn/category/search'
keyword = input('请输入:')
# 构建指定UA 头,绕过反爬
h={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36"
}
# 构建请求体
d={
"keywords":keyword,
"搜 索":"搜 索"
}
# 以post 请求发送参数和指定请求头
response = request.post(url,header=h,data=p)
# 持久化存储
with open(f'{keyword}.html','w',encoding='utf-8') as f:
f.write(response.text)
爬取成功

智慧职教(动态加载数据爬取)(重点)
https://www.icve.com.cn/search
动态加载数据:不是通过单一数据包进行页面渲染,也就无法进行一个数据包爬完数据了
需求分析:获取到教师姓名、来源学校、课程热度、
数据包获取,无法快速定位爬取的数据包? 可用到开发者工具搜索关键字找到需求数据包

数据包分析:GET方式请求,通过pagenum 参数判断返回页,响应包为序列化后的JSON 数据(后端应该是以先加载框架,后加载数据的方式将两者分离了出来)


编写爬虫代码,需接受格式为JSON 数据,这里已经成功获取到值,接下来进行筛选和持久化存储即可
import requests
# 可定义爬出页面
url = "https://www.icve.com.cn/prod-api/homePage/zykCourseList?pageSize=16&pageNum=1"
# 定义UA头和Referer
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0",
"Referer":"https://www.icve.com.cn/search"
}
# 发送请求包并以json 形式接受响应包
response=requests.get(url,headers=headers)
json_data=response.json()
print(json_data)

- 这里分析,响应包为嵌套于rows 列表中的每个字典

编写筛选代码
# 进行数据筛选
for i in json_data["rows"]:
data=f"教师姓名:{i["teacherName"]},学校:{i["schoolName"]},热度:{i["studentNum"]}"
# 进行数据持久存储
with open('智慧.cvs','a+',encoding='utf-8') as f:
f.write(f"{data}\n")
f.close
print("爬取完毕")

- 这里还可以再根据GET 请求中**pageNum **或 pageSize 参数进行多页爬取,步骤于之前实例的步骤一致修改,指定parmes 即可,这里不做演示了
图片数据爬取
response.text 接受数据为字符串形式
response.json() 接受数据为 json 格式*数据
response.content 接受数据为二进制形式,如视频、音频、压缩包等
图片爬取仅需注意接受数据时为content ,接受二进制即可
import requests
url = 'https://ts1.tc.mm.bing.net/th/id/R-C.a22ba862dc4024396921dee05c16b698?rik=j6jky8wC6ZrBUQ&riu=http%3a%2f%2fpic.baike.soso.com%2fp%2f20100127%2fbki-20100127214000-1068687119.jpg&ehk=8f8CTwGTqQyZY0AuFfHuo41VxikBPGpKPafik0dKVfA%3d&risl=&pid=ImgRaw&r=0'
respons = requests.get(url)
# 二进制形式接受图片
img = respons.content
# 二进制形式写入jpeg 图片中
with open("pikachu.jpeg",'wb') as f:
f.write(img)

爬虫-Day1的更多相关文章
- python网络爬虫day1
python爬虫真的很方便,自己不能忽视的问题就是字符编码的问题,一直想腾出时间来看,一直没有时间.明天开始看吧. 今天是学习python爬虫的第一天,从B站上搜到的,可惜可惜. import req ...
- Scrapy爬虫day1——环境配置
安装 Scrapy pip install scrapy 配置虚拟环境 mkvirtualenv Spider 创建项目 在Spider的虚拟环境中运行 scrapy startproject Boo ...
- day1 UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 2490: illegal multibyte sequence 错误提示
get方式得到网页的信息 #coding=utf-8 #pip install requests #直接get到网页的信息 import requests from bs4 import Beauti ...
- 商业爬虫学习笔记day1
day1 一. HTTP 1.介绍: https://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html http://blog.csdn.ne ...
- python网络爬虫与信息提取 学习笔记day1
Day1: 安装python之后,为其配置requests第三方库,并爬取百度主页内容. 语句解释: r.status_code检测请求的状态码,如果状态码为200,则说明访问成功,否则,则说明访问失 ...
- Python爬虫学习 - day1 - 爬取图片
利用Python完成简单的图片爬取 最近学习到了爬虫,瞬时觉得很高大上,想取什么就取什么,感觉要上天.这里分享一个简单的爬取汽车之家文章列表的图片教程,供大家学习. 需要的知识点储备 本次爬虫脚本依赖 ...
- 爬虫抓取5大门户网站和电商数据day1:基础环境搭建
最新想用爬虫实现抓取五大门户网站(搜狐.新浪.网易.腾讯.凤凰网)和电商数据(天猫,京东,聚美等), 今天第一天先搭建下环境和测试. 采用maven+xpath+ HttpClient+正则表达式. ...
- 爬虫初窥day1:urllib
模拟“豆瓣”网站的用户登录 # coding:utf-8 import urllib url = 'https://www.douban.com/' data = urllib.parse.urlen ...
- 爬虫学习--Urllib库基本使用 Day1
一.Urllib库详解 1.什么是Urllib Python内置的HTTP请求库 urllib.request 请求模块(模拟实现传入网址访问) urllib.error ...
- Day1 - Python基础1 介绍、基本语法、流程控制
Python之路,Day1 - Python基础1 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼 ...
随机推荐
- AES加密及AES解密在线工具-九五小庞
访问地址:https://tool.lvtao.net/aes
- Win11专业版电脑开机音效如何设置的问题
不少电脑基地的小伙伴都下载安装了win11专业版这款系统,也有不少细心的小伙伴发现了win11电脑开机音效变了,但是新的音效听起来非常的不舒服,怎么设置其他声音呢?下面技术员小编就来分享具体的解决方法 ...
- 时间复杂度O(n)查找最小覆盖子串
题目:给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 输入:s = &quo ...
- Flutter3-MacOS桌面OS系统|flutter3.32+window_manager客户端OS模板
原创flutter3.32+dart3.8+window_manager桌面OS解决方案Flutter3MacOS. flutter3_macos最新研发flutter3.32+dart3.8+get ...
- AX-MES生产制造管理系统-总览
前言 说起 MES 就不得不说 ERP,但是 ERP 大家基本上都知道,MES 就不一定了,常见的 ERP 系统包括 SAP.金蝶.用友等,ERP的流程相对来说也比较统一:MES就不同了,基本上熟悉业 ...
- SeaTunnel的搭建部署以及测试
SeaTunnel(原Waterdrop)是一款高性能.易扩展的分布式数据集成平台,支持实时和批量数据处理.以下为 SeaTunnel v3.x 的安装及测试全流程指南: 一.安装准备 1. 环境要求 ...
- 为什么用ThreadLocalMap而不使用Session
数据隔离与线程安全 ThreadLocalMap:它为每个线程提供独立的存储空间,确保不同线程间的数据相互隔离,避免了多线程环境下的并发访问问题,无需额外的同步操作就能保证线程安全.比如在处理多个用户 ...
- 3D Gaussian splatting 08: 部署模型网页展示
目录 3D Gaussian splatting 01: 环境搭建 3D Gaussian splatting 02: 快速评估 3D Gaussian splatting 03: 用户数据训练 3D ...
- Mac上使用Docker Desktop启动Kubernetes
正常启动会一直显示 starting,无法启动成功 主要是因为启动所需要的镜像无法正常下载成功 下图为 k8s 所需要的镜像 下载镜像 将仓库克隆下来: git clone https://githu ...
- FFMPEG采集摄像头推流方法说明
命令 ffmpeg -list_devices true -f dshow -i dummy #获取摄像头名称 ffmpeg -f dshow -i video="获取的摄像头的名称&quo ...