爬虫需要学什么,怎么学?小子不才,今日与诸位妄谈爬虫需要学什么,怎么学? 这一话题,个人拙见将自我的学习路程分为如下几个阶段
- 第一层:编程语言
 - 第二层:网络知识,各工具熟练使用
 - 第三层:高性能的爬虫
 - 第四层: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识别验证码
智能解析算法