最近想将爬虫的一些心得和流程完全的总结下来,内容非常多,先列个大纲。
爬虫流程
任务宏观管理
任务调度
任务去重
任务生成
单个爬虫分析与开发
反爬原理
分析步骤
基础请求库
『工欲善其事,必先利其器』
好的基础请求库大都性能不错,有优雅的使用方式,有清晰的异常提醒,有方便的参数配置,支持新的协议(如http2.0),甚至天生自带一些反爬功能,能帮你省不少麻烦事。
python
java
golang
typescript
Man-in-the-MiddleAttack(MITM)
中间人攻击是一种很经典的攻击方式,在爬虫领域主要用来抓包,篡改请求和响应。
- 抓包:因为要爬虫需要模拟用户进行数据的获取,所以必须要通过抓包来明晰请求的协议,这也是爬虫必不可少的环节。
- 篡改请求和响应:在调试爬虫端过程中有时需要修改请求和响应达到自己想要的目的。
抓包
证书信任
请求代理
tcpdump
篡改请求和响应
伪造请求
替换文件
JS逆向
客户端拿到数据一般依赖一个经过复杂加密混淆后的token,要想伪造该token,首先需要突破其代码保护,也就是突破js混淆,然后分析并找到可能存在的加密点进行验证,最后仿写其加密的过程生成token。该环节是硬刚流爬虫难度最大的环节。
混淆原理
ast代码操作
混淆框架
控制流平坦化
代码还原
解混淆插件
加密点定位
hook
token自吐
JS执行
web调试
加密算法介绍
模拟浏览器
在当前爬虫对抗日趋激烈的现在,各种反爬手段层出不同,硬刚其算法还原和加密逻辑难度和成本会过大,需要一种兜底的策略保证能拿到数据,尽管该策略性能较差。
自动化工具介绍
selenium
playwright
puppeteer
通用特征指纹
特征修改:
- headers attributes修改
- JavaScript attributes修改
- plugin检测
- 硬件指纹修改(p1)
- chromium定制(p2)
指纹检测网站参考:
https://gongjux.com/fingerprint/
web-api参考:
https://developer.mozilla.org/zh-CN/docs/Web/api
chromium源码参考:
https://source.chromium.org/chromium
指纹参考:
canvas,webgl,webaudio,navigator,SSL/TLS指纹
性能建设
browser生命周期管理
browser池建立:
- 池子初始化
- 最大实例数
- 实例定期重启
- 实例的创建->初始化->运行中->运行结束->销毁
- 插件脚本加载(抹除通用特征)
- 其他
browser性能状态监控
- 当前可用实例
- 占用资源
RPC
- 提供对browser的直接调用服务
token server
- 管理特定网站的cookie池,加密token池,并检测和维持其有效性
- 对爬虫提供token服务
验证码处理
由于存在各种各样的识别人与机器的验证码,如果实在无法饶过,就需要进行突破。最核心的宗旨就是尽量模拟人类在过验证码时的操作,也是一个将人类操作自动化的过程
验证码分类
图文验证码
点选验证码
滑动验证码
简单图片识别
深度学习框架
pytorch
tensorflow
轨迹算法
打码平台
数据解析
一般而言,请求回来的原始数据会有加密或者不是自己想要的格式,需要解密或者从中提取出自己想要的数据然后自行组装。
数据解密
字符编码
数据提取
json
html
xml
图片识别
网络代理
使用网络代理的原因主要是以下两点:
- 隐匿身份,防止被追踪。
- 突破对ip限制的反爬措施。
隧道代理介绍
建立代理池
爬虫框架
强大的框架可以使一个小型爬虫项目迅速部署起来并且可以掌控性能,还具备常用的例如任务流转,任务管理,任务去重,数据入库等功能。不过老实说,在爬虫对抗日益激烈的现在,框架所做的这些事都不是最重要的,最重要的是突破反爬并拿到数据。
python
java
golang
[colly](