网页抓取解密(反爬告诉服务器能够发送哪些媒体类型-Charset告诉)
优采云 发布时间: 2021-12-26 15:14网页抓取解密(反爬告诉服务器能够发送哪些媒体类型-Charset告诉)
反爬虫机制和破解方法总结——什么是爬虫和反爬虫?2. headers 和referer 反爬虫机制 * Headers 反爬虫是最常见的反爬虫策略。*部分网站会检测Referer(上位链接)(机器行为不太可能通过链接跳转实现)实现爬虫。
头条知识补充***
host:提供主机名和端口号
Referer 提供服务器客户端从该页面链接的信息(有些网站会相应地爬回来)
Origin:Origin字段只收录
发起请求的人,没有其他信息。(仅存储在 post 请求中)
用户代理:发送请求的应用名称(部分网站会根据UA访问的频率间隔进行爬取)
proxies:代理,有的网站会根据ip访问频率等选择屏蔽ip。
cookie:具体的标记信息,一般可以直接复制,有些改动可以选择构造。
(session=requests.session() 自动将cookie信息存储在响应对象中)
Accept 头为客户端提供了一种方法来通知服务器它的首选项和功能
标题说明
Accept 告诉服务器可以发送哪些媒体类型
Accept-Charset 告诉服务器可以发送哪些字符集
Accept-Encoding 告诉服务器可以发送哪些编码方式(最常见的是utf-8)
Accept-Language 告诉服务器可以发送哪些语言
Cache-control:该字段用于指定在整个请求/响应链中所有缓存机制必须遵守的指令
三 ip限制
限制防爬的IP访问频率和数量。
解决方法:构建自己的IP代理池,然后每次访问时随机选择一个代理(但有些IP地址不是很稳定,需要经常检查更新)
四大 UA 限制
UA 使用户能够在访问网站时识别浏览器。
提醒:
当然,如果反爬有时间限制,可以在requests中设置timeout(最好是随机sleep,这样会更安全更稳定,time.sleep())
解决办法是自己搭建UA池,在python每次请求访问时随机挂上UA标志,更好的模拟浏览器行为。
超级简单的请求头 fake_useragent library()
#随机请求头
*敏*感*词*请求
从 fake_useragent 导入 UserAgent
ua = 用户代理()
headers = {'User-Agent': ua.random}
url ='要抓取的网页的URL'
resp = requests.get(url, headers=headers)
##Pending 补货请求加上睡眠时间
五.验证码反爬虫或模拟登录
图片验证码:通过简单的图片识别即可完成
验证码识别的基本方法:截图、二值化、中值滤波、去噪、分割、压缩和重排(让高矮系统一)、字体特征匹配识别。
六、Ajax动态加载
Ajax动态加载的工作原理是:从网页的url加载网页源代码后,JavaScript程序会在浏览器中执行。
这些程序将加载更多内容并将这些内容传输到网页。这就是为什么有些网页会直接爬取它的网址
没有数据的原因。
解决方法:如果使用勾选元素分析“请求”对应链接(方法:右键→勾选元素→网络→清除,点击“加载更多”
”,出现对应的GET链接寻找类型text/html,点击,查看get参数或复制Request URL),循环过程。如果“请求”之前有页面,分析导出第一页根据上一步中的URL,以此类推,抓取ajax地址的数据,使用requests中的json解析返回的json,使用eval()转换成字典进行处理
推荐捕捉工具:fiddler
七.Cookie 限制
打开网页后,将生成一个随机 cookie。如果再次打开网页时cookie不存在,再设置一次,第三次打开还是不存在。爬虫很可能正在工作。
解决方法:将对应的cookie挂在headers中或者按照其方法构造。