爬虫需要学什么,怎么学?小子不才,今日与诸位妄谈爬虫需要学什么,怎么学?
这一话题,个人拙见将自我的学习路程分为如下几个阶段
- 第一层:编程语言
- 第二层:网络知识,各工具熟练使用
- 第三层:高性能的爬虫
- 第四层:JS逆向
- 第五层:小程序逆向
- 第六层:Android逆向
- 第七层:分布式爬虫
- 第八层:爬虫架构
- 第九层:工具链构建
第一层:编程语言
编程语言自然不必多说,至少得会一门语言。推荐的语言有Java、Python、Go、JS
编程语言可简单细分为如下步骤
- 语言背景与历史
- 环境搭建
- 常量变量
- 基础数据类型(bytes、String、int、bool)等
- 运算与运算符(
+、-、*、÷、|、&、^、
)、位运算 - 条件分支语句(if、switch等)
- 循环语句(forloop、while loop)
- 函数、匿名函数、嵌套函数、闭包
- 常见算法(递归、分治、回溯)、排序算法、动态规划、贪心算法、遍历算法
- 错误、异常处理
- 文件操作
- 并发编程
- 网络编程
- 面向对象
- runtime
- gc
- 数据库与中间件(MySQL、MongoDB、Redis、ES)
广度优先,重复学
第二层:网络知识与各工具使用
- 网络模型,ISO、TCP/IP
- 网络协议:HTTP、HTTPS
- 网络知识:URN、URI、URL
- 认证:cookie、session、Token、JWT
工具
浏览器:Chrome
抓包工具:Fiddler、Charles、Mitmproxy(中间人抓包原理,网络原理)
Postman
学完这部分,恭喜你。你已经可以独立开发一个简单的爬虫了
爬虫基本开发步骤如下:
网络抓包,确定目标地址(URN)
发送请求,获取响应
解析响应、获取数据
数据存储(将提取的数据存储到txt或JSON、MySQL、MongoDB、Redis、ES)
第三层:高性能的爬虫
在完成了第二层之后,在其到基础上加速爬虫
- 进程、线程、协程
- 并发并行
- 阻塞非阻塞、I/O模型
第四层:JS逆向
——“想爬?偏不给你爬!”
-
反抓包
-
证书
-
双向验证
- 竟然不用HTTP(S)!RPC来搅局?
-
反请求
-
请求头反抓
- UA
- Sign、token、sale
- Header
-
代码防护
- 布局混淆
- 数字混淆
- 字符串混淆
- 控制流混淆
- 预防混淆
-
验证码
-
识别点选或输入型
-
滑轨、滑块型
-
计算型
-
空值补齐型
-
空间推理型
-
短信或语音验证型
-
-
数据防护
- 动态字体
- CSS偏移
- 内容加密映射
- SVG映射等
- 内容图片化
-
反调试
- 控制台检测
- 无限debugger来了!
- 函数居然被重写?
- 不讲武德,参数生产后删除js!
-
其他反抓
- 风控(如IP、用户行为)
- 浏览器指纹
- 代码运行环境检测等
- JS虚拟机、jsvm、jsvmp
- wasm
金盆洗手?自动化工具来助威! RPC半真半假远程调用
加密算法怎么定位?奇银技巧来助威! Hook、各种搜索断点、debug(XHR、事件)中场休息助一臂之力
插桩妙调,算法自吐
代码怎么扣?环境怎么补?加密算法怎么还原??
AST混淆代码对抗,逐一击破,稳扎稳扎。相信自己会逐渐强大
第五层:小程序逆向
在完成第四层JS逆向的基础上,来看看新宠儿小程序?
小程序包如何来,小程序又是如何验证的?
小程序项目结构又如何?
静态调试,全局游走gank
第六层:Android逆向
新的征程?!
Android正向开发也要学!apk、四大组件、项目布局、配置
反编译神器jadx初尝
又抓不到包了啊!
- 不走代理端口了啊
- 证书校验
- 居然魔改网络协议?
居然还有代码壳,保护代码
“强盗打劫!,移花接木”
-
Frida
-
ratel
-
Xpose
smail、汇编、C/C++、So
IDA动静调试一探究竟
AOSP
完了,芭比扣了
补补Java、JNI、Android吧
第七层:分布式爬虫
任务过多,工人不够?
消息队列抽离任务全局可用,一代多
任务supervisor一带多
配上docker虚拟化,K8s虚拟化,一起拥抱云源生
有始有终,奴奴++
第八层:爬虫架构
跑在云上等,网络角逐者
日志监控:Kafka、ElasticSearch、FileBaet、kibana
第九层:工具链构建
UA Pool
Proxy Pool
Account Pool
DL识别验证码
智能解析算法