爬虫分类
- 通用爬虫--搜索引擎(百度,360,搜狗)
- 聚焦爬虫--爬取特定领域或主题的信息
- 增量爬虫--只爬行新产生或者发生变化的内容
- 深层爬虫--爬取深层网络内容,如需要登录才能访问下载的网站(知乎、百度网盘)、受限网络信息获取
爬行流程
待抓取的url---(网页请求)-----抓回的网页数据---(数据解析)-----网页数据解析结果--(-结果存储)----数据本地存储
HTTP请求和相应报文结构
开始行
- 请求行(请求报文:请求方法、url、协议版本)
- 状态行(响应报文:协议版本、状态码、原因短语)
头部
headers
主体(body)
- 提交参数(请求报文)
- 返回的网页或者数据(响应报文)
主流浏览器对http报文的解析
- 头部
- 通用头部------开始行的结合体
- 请求头部
- 响应头部
- 参数信息------get和post提交的参数
- 主体
- 响应返回的数据
反爬实现思路
直接用requests的get方法请求页面,查看结果
分析头部,获取并设置User-Agent信息
构造头部,设置heades关键字内容
提交请求,查看应对反爬效果
headers={
‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36’
}
response = requests.get(url, headers=headers)
Chrome中与爬虫相关的功能
1.Elements:查找网页源代码html中的元素(标签)
2.Network:分析http请求发起后,各个资源的请求、响应信息
正则爬取图片
一般字符 匹配身份 abc abc
.(点) 匹配任意除换行符‘\n’之外的字符 a.c abc
在dotall模式中也能匹配换行符
\(反斜杠) 转义字符,使后一个字符改变原来的意思。 a\.c a.c
如果字符串中有字符*需要匹配,可以使用\*或者字符集[*] a\\c a\c
[...] 字符集 a[bcd]e abe ace ade
\d 数字[0-9 ] a\dc a1c
\D 非数字[^\d] a\Dc abc
\s 空白字符[空格\t\r\n\f\v] a\sc a c
\S 非空白字符[^\s] a\Sc abc
/w 单词字符[A-Za-z0-9_] a\wc abc
/W 非单词字符[^\w] a\Wc a c
数量词,用在字符或者(...)之后
* 匹配前一个字符0或者无限次 abc* ab abccc
+ 匹配前一个字符1或者无限次 abc+ abc abccc
? 匹配前一个字符0或者1次 abc? ab abc