通过headers字段反爬
- headers中的User-Agent字段反爬
解决:随机生成User-Agent
pip install fake-useragent
from fake_useragent import UserAgent
ua = UserAgent()
for i in range(10):
# 随机生成各种浏览器的ua
print(ua.random)
# 随机生成chorm的ua
# print(ua.chorme)
- 通过referer字段反爬
解决:加上该字段 - 通过cookie字段反爬
cookie:记录用户登录的凭证
解决:
若目标网站不需登录,每次请求携带上一次的cookie即可,使用requests模块的session发起请求
若目标网站需要登录,使用cookie池。
scrapy框架本身自动传递cookie。在start_requests中yied请求时,传入cookie参数。
我们可以在下载器中间件process_requests方法中设置cookie,从cookies池中读取。
通过js反爬
- 通过js实现网页跳转
解决:通过浏览器nextwork中的Preservelog监测页面的跳转 - 通过js加密ajax请求参数
解决:
若请求参数简单,处理携带即可
若请求参数加密复杂,使用selenium模块
使用验证码反爬
解决:使用打码平台
云打码:http://www.yundama.com/
能够解决通用的验证码识别
极验验证码智能识别辅助:http://jiyandoc.c2567.com/
能够解决复杂验证码的识别
验证码url地址
- url地址不变,验证码不变,爬取对应url
- url地址不变,验证码变化,是通过cookie实现的,使用requests模块的session
url地址不好找,使用selenium,截屏并找到对应的验证码图片位置,然后进行打码代码分析。
ip地址反爬
同一ip大量请求对方服务器,会被认为爬虫
解决:
- 使用time.sleep(),但是爬取数据速度会受到影响
- 使用代理池,购买高质量的代理,比如米扑
自定义字体反爬
比如猫眼电影的用户评分等
解决:使用手机版,可以的话尽量使用手机端,爬取难度低于pc端
使用css反爬
解决:计算css的反爬
分布式反爬
一定程度上起到反爬虫作用,提高爬取数据性能