爬虫反爬措施应对
请求头headers
user-agent: fake_useragent
cookie:
referer检测
cookie池维护及调度
GitHub 开源项目 https://github.com/Python3WebSpider/CookiesPool
爬取频率限制
由于爬虫发起请求的频率过大,给服务器造成压力,影响正常经营
- 按一个周期时间内的频率限制,先测试周期及限制的频率,再计算,设置时间间隔
- 还有按天计算频率的 比如天眼查单账户一天只能爬取6000-7000条请求数据
IP限制
-
IP代理
-
自己搭建ip池
开源项目 https://github.com/Python3WebSpider/ProxyPool
-
第三方ip代理
豌豆代理,站大爷
-
-
多主机策略
访问的网站可能有多个主机,可以进行多进程访问网站不同的主机
例如豆瓣:
豆瓣本身有三台服务器,通过http://tool.chinaz.com/dns/?type=1&host=&ip= 可以进行查询
豆瓣本身没有配置IP访问时的virtualhost,通过IP访问服务器一定要在http头部指明host:www.douban.com headers={ 'host':'www.douban.com' } ## 多主机策略,使用ip地址进行访问 req=request.Request('http://154.8.131.171',headers=header)
-
重启路由器 由于路由的自动更换ip原理
分布式搭建
scrapy-redis
https://blog.csdn.net/tichimi3375/article/details/82353597
部署 scrapyd scrapy-client 使用https://www.jianshu.com/p/ddd28f8b47fb
# 安装
pip install scrapy
pip install scrapyd
pip install scrapyd-client
# 开启scrapyd 服务
scrapyd
#修改前
[deploy]
#url = http://localhost:6800/
project = xiaozhuSpider2
#修改后
[deploy:demo]# 增加
url = http://localhost:6800/ # 打开部署的机器
project = xiaozhuSpider2
在windows环境下,在python解释器文件中创建 scrapyd-deploy.bat
因为scrapyd-deploy不能直接运行
@echo off
::python解释器 scrapyd-deploy 路径
"C:\Program Files\Python35\python.exe" "C:\Program Files\Python35\Scripts\scrapyd-deploy" %1 %2 %3 %4 %5 %6 %7 %8 %9
进入 带有scrapy.cfg的那一层级目录
# 执行部署命令 将爬虫上传到机器
scrapyd-deploy demo -p xiaozhuSpider2
# 先运行命令查看服务端状态
curl http://localhost:6800/daemonstatus.json
# 执行运行命令
# project为工程名 spider 为spiders文件下的爬虫文件名
curl http://localhost:6800/schedule.json -d project=xiaozhuSpider2 -d spider=xiaozhu
在浏览器 请求 127.0.0.1:6800 进入web页面查看状态
补充:
我们在生产环境中,一般scrapyd是部署在服务器,而我们一般会从本地直接发送到服务器端,这时需要调整
vim /usr/lib/python3/site-packages/scrapyd/default_scrapyd.conf
scrapyd的默认配置文件:
默认scrapyd启动bind绑定的ip地址是127.0.0.1端口是:6800, 将ip地址设置为0.0.0.0
打开配置文件不需要翻页就能够找到bind_address
api命令见 https://scrapyd.readthedocs.io/en/stable/api.html
scrapy-redis
GitHub开源scrapyd https://github.com/scrapy/scrapyd
部署界面 https://github.com/scrapy/scrapyd-client
可视化任务管理 https://github.com/DormyMo/SpiderKeeper
安装
pip install scrapyd
图片验证码
-
手动识别验证码
-
pytesseract识别简单的验证码
-
对接打码平台
超级鹰
极验验证码
selenium 处理
https://blog.csdn.net/qq_42213727/article/details/80750666
国家企业信用信息中心: https://segmentfault.com/a/1190000017499416
js混淆和渲染
js渲染其实就是对HTML页面的修改。比如有一些网页本身没有返回数据,数据是经过js加载之后添加到HTML当中的。当遇到这种情况的时候,我们要知道爬虫是不会执行JavaScript操作。所以需要用其他的方法处理。
- 通过阅读网站js源码,找到关键的代码,并用python实现。
- 通过阅读网站js源码,找到关键的代码,用PyV8等库直接执行js代码。
- 通过selenium库直接模拟浏览器环境。
字体反爬处理
猫眼、汽车之家: http://www.sohu.com/a/259331155_176628
采用自定义字体文件是CSS3的新特性
https://blog.csdn.net/litang199612/article/details/83413002
大众点评 :https://www.cnblogs.com/shenyiyangle/p/10730872.html
selenium模拟浏览器
App抓包
fidder 天天模拟器 抓包 https://www.sohu.com/a/281365906_747391
微信小程序
APP 抓包和微信小程序抓包-Charles 的精简使用教程
https://blog.csdn.net/liqing0013/article/details/83010531
分析微信发送消息接口(基于网页版分析)
https://juejin.im/post/5d1d6ee5e51d45775d516fdd
APP抓包和反编译
反编译工具: Jadx
-
加密方式:80%都是 时间戳 ts + sign ------sign值是对参数进行MD5运算的字符串
-
就是直接将Java标准库中常见的被用于生成加密参数的方法给Hook了,监听它们的输入参数和返回值,这样就能直接得到加密、Hash前的原文、密钥、IV等内容 工具包 :Inspeckage
而在你需要的时候,只需要打开Inspeckage -> 选择需要Hook的APP -> 打开Inspeckage的Web端或者在日志中搜索你所需要找的加密参数就可以得到原文和使用的加密、Hash类型,直接秒杀!
使用JustTrustMe之类的Hook工具
浏览器(Chrome)
Fiddler/Charles之类的抓包工具(Fiddler)
Python和JavaScript的IDE或编辑器(Pycharm + WebStorm)
Python3.x和NodeJS(Python3.6.5 + NodeJS10.15.1)
Python库:pyexecjs、aiohttp、aiohttp_requests、lxml(最新版本)
NodeJS库:jsdom(最新版本)
当你写爬虫时遇上Flash+加密的解决方式
https://juejin.im/post/5c88af83f265da2deb6ae769