《Java网络爬虫精解与实践》
本书内容
《Java网络爬虫精解与实践》全面而系统地介绍与网络爬虫程序相关的理论知识,并包含大量的实践操作案例。
《Java网络爬虫精解与实践》共分为 8 章。第 1 章以自动化框架为基础,介绍网络爬虫程序的入门开发实践。第 2 章深入讲解网页内容的处理、解析技术和数据提取方法。第 3 章讨论验证码识别技术以及如何有效绕过验证码的策略。第 4 章涉及网络抓包技术及其对抗策略。第 5 章深入探讨 JavaScript 代码的混淆技术与逆向分析方法。第 6 章专注于移动端应用程序的数据爬取技术及相关逆向分析技术。第 7 章介绍构建分布式网络爬虫系统所需的关键 技术。第 8 章通过实战案例,展示分布式网络爬虫系统设计与实现的思路。通过学习本书,读者将显著提升网络爬虫系统的设计与实现能力,并增强对网页代码及移动端应用程序代码的逆向分析水平。
本书作者
张 凯
中国科学院大学软件工程专业硕士,研究方向为操作系统虚拟化,毕业后先后供职于微策略、新浪微博,目前供职于粉笔科技,任技术总监职务,担任爬虫平台、内容审核平台等多个重要系统技术负责人。对网络爬虫、高可用架构设计和文本分类领域有着深入研究。
本书读者
《Java网络爬虫精解与实践》的内容不仅涵盖理论知识,还注重实践操作,适合广大网络爬虫程序开发爱好者 阅读。同时,《Java网络爬虫精解与实践》也适合作为培训机构和学校的教学参考用书。
本书目录
第 1 章 网络爬虫开发入门实践 1
1.1 Java 网络爬虫框架概览1
1.2 搭建开发环境5
1.2.1 搭建 Java 开发环境5
1.2.2 搭建 Selenium 开发环境6
1.3 简单 Web 爬虫程序示例7
1.3.1 获取网页内容并打印7
1.3.2 利用 XPath 获取指定元素8
1.3.3 单击搜索按钮9
1.3.4 获取 iframe 元素中的数据 9
1.3.5 使用更加优雅的等待方式10
1.3.6 实现屏幕截图12
1.3.7 执行 JavaScript 脚本12
1.4 WebDriver 选项配置3
1.4.1 浏览器通用选项配置13
1.4.2 Chrome 浏览器特定选项配置 14
1.4.3 Chrome DevTools Protocol14
1.5 BrowserMob Proxy 18
1.6 其他主流 Web 自动化测试框架19
1.6.1 Puppeteer20
1.6.2 Playwright20
1.7 本章小结21
1.8 本章练习21
第 2 章 网页内容解析与提取 24
2.1 Selenium 元素定位器24
2.2 基于正则表达式的内容解析与提取27
2.2.1 正则表达式的基础语法27
2.2.2 正则表达式的高级应用技巧29
2.2.3 正则表达式的应用场景31
2.3 基于 JsonPath 的内容解析与提取34
2.4 本章小结36
2.5 本章练习36
IV Java 网络爬虫精解与实践
第 3 章 验证码绕过与识别 38
3.1 验证码介绍38
3.1.1 基于文本识别的验证码39
3.1.2 基于图片识别的验证码39
3.1.3 基于语音识别的验证码40
3.1.4 基于行为识别的智能验证码40
3.2 避免 CAPTCHA 验证码触发 40
3.3 CAPTCHA 验证码生成 42
3.3.1 文本验证码的生成42
3.3.2 滑块验证码的生成43
3.3.3 点选验证码的生成45
3.4 CAPTCHA 验证码识别 47
3.4.1 文本验证码识别方案 1 47
3.4.2 文本验证码识别方案 2 52
3.4.3 滑块验证码的识别56
3.4.4 点选验证码的识别59
3.5 本章小结65
3.6 本章练习66
第 4 章 网络抓包与对抗 67
4.1 Fiddler 67
4.1.1 Fiddler 的安装配置与基础功能使用 67
4.1.2 Fiddler 的高级特性 70
4.2 Charles73
4.3 Wireshark 75
4.4 SSL Pinning 保护机制下的网络数据抓包78
4.4.1 配置自定义 CA 证书 79
4.4.2 添加抓包软件证书到系统信任的 CA 证书列表 82
4.4.3 使用 Hook 技术84
4.5 JustTrustMe 的工作原理 86
4.5.1 SSL Pinning 机制的实现86
4.5.2 JustTrustMe 模块 Hook 操作的实现原理89
4.6 本章小结90
4.7 本章练习91
第 5 章 JavaScript 逆向分析技术 92
5.1 常见的反爬虫策略及其应对方案92
5.1.1 基于访问频率的检查与访问限制92
5.1.2 基于请求参数和请求头信息的反爬虫技术94
5.1.3 基于蜜罐机制的反爬虫技术94
5.1.4 隐藏网页的跳转链接95
5.2 浏览器指纹识别与修复96
5.2.1 浏览器指纹识别的工作原理96
5.2.2 浏览器指纹泄露97
5.2.3 浏览器指纹泄露修复98
5.3 JavaScript 代码保护技术98
5.3.1 JavaScript 代码反调试技术 99
5.3.2 基于完整性检测的代码保护技术106
5.3.3 限制 JavaScript 代码执行环境111
5.3.4 JavaScript 代码混淆技术 111
5.4 JavaScript 抽象语法树122
5.4.1 抽象语法树的结构123
5.4.2 抽象语法树的生成过程124
5.4.3 操作抽象语法树126
5.4.4 操作抽象语法树反混淆基础实践131
5.5 JavaScript Hook 技术 137
5.6 JavaScript 逆向工程实践143
5.6.1 JavaScript 反混淆实战 143
5.6.2 JavaScript Hook 技术实战 156
5.7 本章小结160
5.8 本章练习161
第 6 章 App 数据爬取与逆向分析 162
6.1 基于抓包分析的 App 数据爬取 162
6.2 基于 Appium 自动化框架的 App 数据采集163
6.2.1 Appium 简介 163
6.2.2 Appium 环境搭建 164
6.2.3 Appium 2.x 和 Appium 1.x166
6.2.4 移动端 Web 爬虫开发实践168
6.2.5 移动端 Native App 爬虫开发实践 171
6.2.6 移动端 Hybrid App 爬虫开发实践173
6.2.7 Appium 开发环境的常见错误与处理技巧 175
6.3 Android 应用程序静态分析 177
6.3.1 Android 应用程序基本结构剖析177
6.3.2 Android 应用程序构建过程180
6.3.3 Smali 代码分析182
6.4 Android 应用程序动态分析 188
6.4.1 向 Smali 代码中添加 debug 日志 189
6.4.2 利用 Frida 框架进行逆向动态分析191
6.5 二进制文件逆向分析207
6.5.1 利用 objdump 逆向分析207
6.5.2 利用 IDA 进行逆向静态分析208
6.5.3 利用 IDA 进行动态逆向分析210
6.6 加壳与脱壳技术213
6.6.1 相关基础知识214
6.6.2 加壳技术实现原理215
6.6.3 脱壳技术实现原理217
6.7 App 逆向分析实战一221
6.8 App 逆向分析实战二225
6.9 本章小结228
6.10 本章练习 228
第 7 章 分布式爬虫系统关键技术 229
7.1 常用的分布式架构模式229
7.1.1 主从模式229
7.1.2 自治模式230
7.2 任务调度策略231
7.2.1 基于数据分区的调度策略231
7.2.2 基于资源感知的调度策略234
7.2.3 基于优先级的调度策略235
7.2.4 基于自定义规则的调度策略235
7.3 任务调度器236
7.3.1 Quartz236
7.3.2 ElasticJob 238
7.3.3 XXL-JOB 239
7.4 分布式消息队列240
7.4.1 应用场景241
7.4.2 分布式消息队列的类型241
7.5 服务注册与发现242
服务注册与发现架构类型242
7.6 完全重复内容检测245
7.6.1 布隆过滤器245
7.6.2 基于哈希指纹的重复性检测247
7.7 近似重复内容检测248
7.7.1 基于词特征的文本相似度计算算法248
7.7.2 基于深度学习的文本相似度计算算法249
7.7.3 近似最近邻算法250
7.8 本章小结253
7.9 本章练习253
第 8 章 分布式爬虫系统实战 254
8.1 需求分析254
8.1.1 功能需求分析254
8.1.2 非功能需求分析255
8.2 系统设计与实现255
8.2.1 总体设计256
8.2.2 爬取任务调度模块257
8.2.3 反爬虫对抗组件259
8.2.4 系统监控模块261
8.2.5 重复内容过滤模块263
8.2.6 内容相关性识别模块271
8.2.7 爬取任务执行模块273
8.2.8 系统底层存储设计279
8.3 本章小结281
8.4 本章练习281
本书特色
本文摘自《Java网络爬虫精解与实践》,获出版社和作者授权发布。