第一篇 基 础 知 识
第 1 章 开发环境配置.3
6分钟
1.1 搭建 Python 编程环境3
1.1.1 获取 Python 安装包 3
1.1.2 安装 Windows 版的 Python 开发包 .4
1.1.3 安装 macOS 版的 Python 开发包.4
1.1.4 安装 Linux 版的 Python 开发包.5
1.2 安装 Anaconda Python 开发环境 .5
1.3 消除 Python REPL 中的错误和警告 .6
1.4 安装 PyCharm7
1.5 配置 PyCharm8
1.6 小结 .9
第 2 章 爬虫基础.10
10 分钟
2.1 HTTP 基础 10
2.1.1 URI 和 URL.10
2.1.2 超文本 .11
2.1.3 HTTP 与 HTTPS11
2.1.4 HTTP 的请求过程 13
2.1.5 请求 .16
2.1.6 响应 .19
2.2 网页基础 .22
2.2.1 HTML 基础22
2.2.2 CSS 基础23
2.2.3 CSS 选择器23
2.2.4 JavaScript.25
2.3 爬虫的基本原理.25
2.3.1 爬虫的分类 .26
2.3.2 爬虫抓取数据的方式和手段.26
2.4 Session 与 Cookie 27
6 Python 爬虫从菜鸟到高手
2.4.1 静态页面和动态页面.27
2.4.2 无状态 HTTP 与 Cookie .28
2.4.3 利用 Session 和 Cookie 保持状态 28
2.4.4 查看网站的 Cookie .29
2.4.5 HTTP 状态何时会失效 30
2.5 项目实战:抓取所有的网络资源 31
实例 2.1 基于递归算法的爬虫的代码.34
2.6 项目实战:抓取博客文章列表.35
实例 2.2 抓取博客园首页文章列表的爬虫 36
2.7 小结 .38
第二篇 网 络 库
第 3 章 网络库 urllib .41
39 分钟
3.1 urllib 简介 .41
3.2 发送请求与获得响应.42
3.2.1 用 urlopen 函数发送 HTTP GET 请求.42
实例 3.1 使用 HTTPResponse 读取响应数据42
3.2.2 用 urlopen 函数发送 HTTP POST 请求.43
实例 3.2 使用 urlopen 函数发送 HTTP POST 请求,并获得返回数据 43
3.2.3 请求超时 .44
实例 3.3 捕捉 urlopen 函数的超时异常.45
3.2.4 设置 HTTP 请求头 .45
实例 3.4 修改和提交 HTTP 请求头 .45
3.2.5 设置中文 HTTP 请求头 .47
实例 3.5 设置和解码中文 HTTP 请求头.48
3.2.6 请求基础验证页面.49
实例 3.6 请求基础验证页面.50
3.2.7 搭建代理与使用代理.53
实例 3.7 通过代理访问 Web 页面 .55
3.2.8 读取和设置 Cookie .55
实例3.8 读取Cookie.56
实例 3.9 将 Cookie 保存为 Mozille 格式和 LWP 格式57
实例 3.10 装载和发送 Cookie.58
3.3 异常处理 .59
3.3.1 URLError .59
实例 3.11 捕捉发送请求抛出的异常.59
3.3.2 HTTPError .60
目录 7
实例 3.12 使用 HTTPError 类和 URLError 类捕捉异常.60
3.4 解析链接 .61
3.4.1 拆分与合并 URL 方法一(urlparse 与 urlunparse) .61
实例 3.13 使用 urlparse 函数和 urlunparse 函数拆分与合并 URL62
3.4.2 拆分与合并 URL 方法二(urlsplit 与 urlunsplit) 63
实例 3.14 使用 urlsplit 函数和 urlunsplit 函数拆分与合并 URL.63
3.4.3 连接 URL(urljoin)64
实例 3.15 使用 urljoin 函数连接 URL64
3.4.4 URL 编码(urlencode).65
实例 3.16 使用 urlencode 函数编码包含中文的 URL 65
3.4.5 编码与解码(quote 与 unquote) .65
实例 3.17 使用 quote 函数和 unquote 对 URL 中的参数编码和解码 .65
3.4.6 参数转换(parse_qs 与 parse_qsl)65
实例 3.18 拆分由多个参数组成的字符串 66
3.5 Robots 协议 .66
3.5.1 Robots 协议简介 .66
3.5.2 分析 Robots 协议 68
实例 3.19 用 robots.txt 约束爬虫 68
3.6 小结 .69
第 4 章 网络库 urllib3.70
10 分钟
4.1 urllib3 简介 .70
4.2 urllib3 模块 .70
4.3 发送HTTPGET请求 .71
实例 4.1 获取百度的搜索结果.71
4.4 发送HTTPPOST请求 .72
实例 4.2 发送 HTTP POST 请求,并接收返回结果.72
4.5 HTTP 请求头 73
实例 4.3 搜索天猫商城中的数据.74
4.6 HTTP 响应头 76
实例 4.4 获取并输出 HTTP 响应头信息.76
4.7 上传文件 .76
实例 4.5 将任意文件上传到服务端.77
4.8 超时 .78
实例 4.6 连接超时和读取超时.78
4.9 小结 .79
第 5 章 网络库 requests 80
17 分钟
5.1 基本用法 .80
8 Python 爬虫从菜鸟到高手
5.1.1 requests 的 HelloWorld .80
实例 5.1 发送 HTTP GET 请求,并获取响应的返回信息 80
5.1.2 HTTP GET 请求 81
实例5.2 设置HTTP GET请求参数.81
5.1.3 添加 HTTP 请求头 .82
实例 5.3 设置 HTTP 请求头 .82
5.1.4 抓取二进制数据.83
实例 5.4 抓取并保存图像.83
5.1.5 HTTP POST 请求 84
实例 5.5 发送 HTTP POST 请求,并获取响应数据.84
5.1.6 响应数据 .84
实例 5.6 向简书发送 HTTP GET 请求,并输出响应结果 85
5.2 高级用法 .85
5.2.1 上传文件 .86
实例 5.7 上传本地图像.86
5.2.2 处理 Cookie .87
实例 5.8 获取和发送 Cookie.87
5.2.3 使用同一个会话(Session).88
实例 5.9 Session 与 Cookie 密切配合维护会话.88
5.2.4 SSL 证书验证89
实例 5.10 捕捉证书验证异常.89
5.2.5 使用代理 .92
实例 5.11 通过代理访问天猫首页,并输出响应内容 92
5.2.6 超时 .92
实例 5.12 连接超时和读取超时.93
5.2.7 身份验证 .93
实例5.13 发送Basic 验证请求 94
5.2.8 将请求打包 .94
实例 5.14 封装和发送请求.94
5.3 小结 .95
第三篇 解 析 库
第 6 章 正则表达式.99
35 分钟
6.1 使用正则表达式.99
6.1.1 使用 match 方法匹配字符串 .99
实例 6.1 利用 match 方法与 group 方法实现模式匹配99
6.1.2 使用 search 方法在一个字符串中查找模式 100
目录 9
实例 6.2 使用 match 方法与 search 方法进行匹配和搜索 100
6.1.3 匹配多个字符串.101
实例6.3 择一匹配符与匹配和搜索.101
6.1.4 匹配任何单个字符.102
实例 6.4 点符号的匹配与替换.102
6.1.5 使用字符集 .103
实例6.5 字符集和择一匹配符的用法和差别 104
6.1.6 重复、可选和特殊字符.105
实例 6.6 各种匹配符号的用法.106
6.1.7 分组 .108
实例 6.7 在正则表达式中使用分组.108
6.1.8 匹配字符串的起始和结尾及单词边界 109
实例 6.8 匹配字符串的起始和结束位置及单词的边界 110
6.1.9 使用 findall 函数和 finditer 函数查找每一次出现的位置 111
实例6.9 使用findall 函数和 finditer 函数搜索字符串.111
6.1.10 用 sub 函数和 subn 函数搜索与替换 .113
实例 6.10 使用 sub 函数和 subn 函数搜索和替换字符串 .113
6.1.11 使用 split 函数分隔字符串114
实例 6.11 使用 split 函数分隔字符串114
6.2 一些常用的正则表达式.115
实例 6.12 使用 Email、IP 地址和Web地址的正则表达式115
6.3 项目实战:抓取小说目录和全文 116
实例6.13 抓取小说目录爬虫的完整实现 118
6.4 小结 .120
第 7 章 lxml 与 XPath 121
28 分钟
7.1 lxml 基础 .121
7.1.1 安装 lxml .121
7.1.2 操作 XML 122
实例7.1 使用lxml获取XML 的节点文本和属性值 122
7.1.3 操作 HTML124
实例7.2 使用lxml获取HTML文档的节点文本和属性值.124
7.2 XPath .125
7.2.1 XPath 概述 125
7.2.2 使用 XPath 125
实例7.3 利用lxml和XPath 提取 HTML 文件中的信息 .125
7.2.3 选取所有节点.127
实例7.4 使用 XPath 选取 HTML 文件中的节点 127
7.2.4 选取子节点 .128
10 Python 爬虫从菜鸟到高手
实例7.5 使用XPath 根据规则选取<a>节点.129
7.2.5 选取父节点 .129
实例7.6 使用XPath 选取<a>节点和父节点,并输出 class 属性值 130
7.2.6 属性匹配与获取.130
实例 7.7 根据href属性过滤<a>节点 130
7.2.7 多属性匹配 .131
实例7.8 使用and和or选取<a>节点131
7.2.8 按序选择节点.132
实例7.9 使用XPath 和索引获取特定<a>节点 132
7.2.9 节点轴选择 .133
实例7.10 使用XPath 和节点轴选择方法获取特定的节点 133
7.2.10 在 Chrome 中自动获得 XPath 代码.135
实例 7.11 利用 requests 库抓取京东商城导航条文本 .135
7.2.11 使用 Chrome 验证 XPath137
7.3 项目实战:抓取豆瓣 Top250 图书榜单 138
实例7.12 抓取豆瓣 Top250 图书榜单爬虫完整实现 141
7.4 项目实战:抓取起点中文网的小说信息 142
实例7.13 抓取起点中文网小说信息爬虫完整实现 144
7.5 小结 .146
第 8 章 Beautiful Soup 库. 147
24 分钟
8.1 Beautiful Soup 简介.147
8.2 Beautiful Soup 基础.147
8.2.1 安装 Beautiful Soup.147
8.2.2 选择解析器 .148
8.2.3 编写第一个 Beautiful Soup 程序149
实例8.1 使用Beautiful Soup 分析 HTML 代码.149
8.3 节点选择器.150
8.3.1 选择节点 .150
实例8.2 使用Beautiful Soup 节点选择器获取特定节点的信息.151
8.3.2 嵌套选择节点.152
实例 8.3 嵌套选择 HTML 文档中的节点 152
8.3.3 选择子节点 .153
实例8.4 选取子节点和子孙节点.154
8.3.4 选择父节点 .156
实例8.5 获取a节点的父节点.156
8.3.5 选择兄弟节点.157
实例8.6 获取li节点的同级节点 158
8.4 方法选择器.159
目录 11
8.4.1 find_all 方法159
实例8.7 使用find_all 方法搜索 ul 节点和li节点.160
实例 8.8 根据属性值定位节点.161
实例8.9 通过节点内容定位文本节点.162
8.4.2 find 方法163
实例8.10 搜索特定条件的节点.163
8.5 CSS 选择器164
8.5.1 基本用法 .164
实例 8.11 使用 CSS 选择器查询特定的节点164
8.5.2 嵌套选择节点.165
实例 8.12 混合使用 CSS 选择器和方法选择器搜索特定节点165
8.5.3 获取属性值与文本.167
实例 8.13 使用 CSS 选择器选取特定的a节点 167
8.5.4 通过浏览器获取 CSS 选择器代码 168
实例 8.14 使用 CSS 选择器获取京东上传导航条的链接文本168
8.6 实战案例:抓取酷狗网络红歌榜 170
实例8.15 抓取酷狗网络红歌榜爬虫完整实现 171
8.7 小结 .172
第 9 章 pyquery 库 173
24 分钟
9.1 pyquery 简介 .173
9.2 pyquery 基础 .173
9.2.1 安装 pyquery .173
9.2.2 pyquery 的基本用法 .174
实例9.1 通过3种方式为 PyQuery 对象传入 HTML 文档 174
9.3 CSS 选择器175
实例 9.2 使用 pyquery 和 CSS 选择器分析和提取 HTML 代码中的信息 175
9.4 查找节点 .177
9.4.1 查找子节点 .177
实例9.3 使用find 方法和 children 方法查找子节点.177
9.4.2 查找父节点 .178
实例 9.4 使用 parent 方法和 parents 方法获取父节点.178
9.4.3 查找兄弟节点.179
实例 9.5 使用 siblings 方法查找兄弟节点 179
9.4.4 获取节点信息.180
实例9.6 获取节点的各种信息.182
9.5 修改节点 .184
9.5.1 添加和移除节点的样式(addClass 和 removeClass) 184
实例9.7 修改节点的样式.185
12 Python 爬虫从菜鸟到高手
9.5.2 修改节点属性和内容(attr、removeAttr、text 和 html).186
实例9.8 attr方法、removeAttr 方法、text 方法和 html 方法的用法演示 .187
9.5.3 删除节点(remove)188
实例 9.9 使用 remove 方法删除节点 .189
9.6 伪类选择器.190
实例 9.10 伪类选择器用法展示.190
9.7 项目实战:抓取当当图书排行榜 191
实例9.11 分析当当图书搜索页面.194
9.8 项目实战:抓取京东商城手机销售排行榜 196
实例9.12 分析京东商城搜索页面,并将结果保存到 Excel 文档中.197
9.9 小结 .201
第四篇 数 据 存 储
第 10 章 文件存储 . 205
38 分钟
10.1 打开文件.205
10.2 操作文件的基本方法.206
10.2.1 读文件和写文件.207
实例10.1 使用不同模式操作文件.207
10.2.2 读行和写行.208
实例 10.2 按行读写文本文件.209
10.3 使用 FileInput 对象读取文件210
实例10.3 获取文件内容和相关属性.210
10.4 处理 XML 格式的数据.211
10.4.1 读取与搜索 XML 文件.211
实例10.4 获取 XML 文件的节点和属性信息 211
10.4.2 字典转换为 XML 字符串.212
实例10.5 将字典对象转换为格式化的 XML 文件 213
10.4.3 XML 字符串转换为字典214
实例10.6 将XML 文件转换为字典对象.214
10.5 处理 JSON 格式的数据215
10.5.1 JSON 字符串与字典互相转换.216
实例10.7 字典与JSON 字符串互相转换216
10.5.2 将 JSON 字符串转换为类实例217
实例 10.8 将 product.json 文件转换为 Product 对象.218
10.5.3 将类实例转换为 JSON 字符串219
实例10.9 将Product对象转换为 JSON 文件 .219
10.5.4 类实例列表与 JSON 字符串互相转换219
目录 13
实例 10.10 将 Product 对象列表与 JSON 文件互相转换 .219
10.6 将 JSON 字符串转换为 XML 字符串220
实例 10.11 将 products.json 文件转换为 XML 文件 .220
10.7 CSV 文件存储.221
10.7.1 写入 CSV 文件221
实例 10.12 将数据写入 CSV 文件222
10.7.2 读取 CSV 文件223
实例10.13 读取CSV 文件中的数据224
10.8 小结 .224
第 11 章 数据库存储 . 225
5分钟
11.1 SQLite 数据库 .225
11.1.1 管理SQLite 数据库225
11.1.2 用 Python 操作 SQLite 数据库.228
实例11.1 读写 SQLite 数据库中的数据228
11.2 项目实战:抓取豆瓣音乐排行榜 230
实例11.2 抓取豆瓣音乐 Top250 排行榜爬虫完整实现 232
11.3 项目实战:抓取豆瓣电影排行榜 235
实例11.3 抓取豆瓣电影 Top250 排行榜爬虫的完整实现 236
11.4 小结 .239
第五篇 爬虫高级应用
第 12 章 抓取异步数据 . 243
11 分钟
12.1 异步加载与 AJAX 243
12.2 基本原理.243
实例12.1 使用jQuery 发送请求,并获取数据244
12.3 逆向工程.246
12.4 提取结果.249
实例12.2 使用requests访问异步请求的 URL.249
12.5 项目实战:支持搜索功能的图片爬虫 250
实例12.3 图片爬虫完整实现.253
12.6 项目实战:抓取京东图书评价.255
实例12.4 抓取京东图书评价爬虫完整实现 256
12.7 小结 .259
第 13 章 可见即可“爬”:Selenium. 260
16 分钟
13.1 安装 Selenium .260
14 Python 爬虫从菜鸟到高手
13.2 安装 WebDriver.261
13.2.1 安装 ChromeDriver261
13.2.2 安装 Edge WebDriver262
13.2.3 安装其他浏览器的 WebDriver 263
13.3 Selenium 的基本使用方法 .264
实例 13.1 使用 Selenium 控制浏览器264
13.4 查找节点.267
13.4.1 查找单个节点.267
实例13.2 使用find_element 查找单个节点267
13.4.2 查找多个节点.269
实例13.3 使用find_elements 查找多个节点 269
13.5 节点交互.270
实例13.4 模拟单击浏览器中的按钮.270
13.6 动作链 .271
实例13.5 模拟鼠标移动动作,自动控制京东商城首页 271
实例13.6 模拟拖拽动作移动节点.273
13.7 执行 JavaScript 代码.274
实例13.7 动态执行 JS 代码滚动京东商城首页.274
13.8 获取节点信息.275
实例 13.8 使用 Selenium API 获取京东商城首页 HTML 中的信息275
13.9 管理 Cookies276
实例 13.9 用 Selenium API 读写 Cookie.276
13.10 改变节点的属性值.277
实例13.10 改变百度搜索按钮的位置.277
实例13.11 修改京东商城首页的导航条菜单 278
13.11 项目实战:抓取 QQ 空间说说的内容.279
实例13.12 抓取QQ 空间说说内容爬虫完整代码.279
13.12 小结 .281
第 14 章 基于 Splash 的爬虫 . 282
14.1 Splash 基础282
14.1.1 Splash 功能简介282
14.1.2 安装 Docker.282
14.1.3 安装 Splash283
14.2 Splash Lua 脚本.285
14.2.1 第一个 Lua 脚本.285
实例14.1 获取京东商城首页的标题.285
14.2.2 异步处理 .286
实例14.2 异步访问多个 URL,并显示这些 URL 对应的截图286
14.2.3 Splash 对象属性287
目录 15
14.2.4 go方法.290
实例 14.3 发送 POST 请求,并返回 HTML 代码和 Har 图表.291
14.2.5 wait 方法292
14.2.6 jsfunc 方法.292
实例 14.4 调用 JavaScript 函数获取节点信息 292
14.2.7 evaljs 方法.293
14.2.8 runjs 方法 293
14.2.9 autoload 方法.293
实例14.5 使用jQuery 获取 a 节点的总数 293
14.2.10 call_later 方法 .294
实例 14.6 延迟获取页面截图.294
14.2.11 http_get 方法 .296
实例 14.7 发送 HTTP GET 请求,并接收返回结果 296
14.2.12 http_post 方法 .296
实例 14.8 发送 HTTP POST 请求,并接收返回结果.297
14.2.13 set_content 方法 297
14.2.14 html 方法.298
14.2.15 png 方法 299
14.2.16 jpeg 方法 .299
14.2.17 har 方法.299
14.2.18 其他方法 .299
14.3 使用 CSS 选择器 303
14.3.1 select 方法.303
实例 14.9 在京东商城首页搜索框中输入关键字 303
14.3.2 select_all 方法.304
实例14.10 查找京东商城首页 HTML 代码中的 a 节点,并返回相关数据304
14.4 模拟鼠标键盘动作.305
实例14.11 模拟单击京东商城首页搜索按钮 305
14.5 Splash HTTP API.306
实例14.12 返回PNG 格式图像并保存.309
14.6 项目实战:使用 Splash Lua 抓取京东搜索结果.310
实例14.13 抓取京东搜索结果爬虫完整实现代码 310
14.7 小结 .312
第 15 章 抓取移动 App 的数据 313
15.1 使用 Charles 313
15.1.1 抓取 HTTP 数据包 .313
15.1.2 安装 PC 端证书 315
15.1.3 在手机端安装证书.316
15.1.4 监听 HTTPS 数据包 .317
16 Python 爬虫从菜鸟到高手
15.2 使用 mitmproxy .318
15.2.1 安装 mitmproxy .318
15.2.2 在 PC 端安装 mitmproxy 证书 .319
15.2.3 在移动端安装 mitmproxy 证书321
15.2.4 mitmproxy 的主要功能 .322
15.2.5 设置手机的代理.323
15.2.6 用 mitmproxy 监听 App 的请求与响应数据 .324
15.2.7 使用 mitmproxy 编辑请求信息325
15.2.8 mitmdump 与 Python 对接 327
15.2.9 使用 mitmweb 监听请求与响应 331
15.3 项目实战:实时抓取“得到”App 在线课程.332
实例15.1 爬虫完整代码.334
15.4 使用 Appium 在移动端抓取数据337
15.4.1 Appium 安装与配置 .337
15.4.2 Appium 的基本使用方法 .340
15.4.3 使用 Python 控制手机 App 344
实例 15.2 控制微信App.344
15.4.4 AppiumPythonClient API.345
15.5 小结 .348
第 16 章 多线程和多进程爬虫 . 349
31 分钟
16.1 线程与进程.349
16.1.1 进程 .349
16.1.2 线程 .349
16.2 Python与线程 .350
16.2.1 使用单线程执行程序.350
实例 16.1 单线程调用函数演示.350
16.2.2 使用多线程执行程序.351
实例16.2 多线程调用函数演示.351
16.2.3 为线程函数传递参数.352
实例16.3 为线程函数传递参数.352
16.2.4 线程和锁 .353
实例 16.4 线程加锁与解锁.353
16.3 高级线程模块(threading)354
16.3.1 Thread 类与线程函数.355
实例 16.5 使用 Thread.join 方法等待所有线程执行完毕 355
16.3.2 Thread 类与线程对象.356
实例16.6 用Thread对象管理线程356
16.3.3 从 Thread 类继承357
目录 17
实例 16.7 通过 Thread 的子类管理线程 .357
16.4 线程同步.359
16.4.1 线程锁 .360
实例16.8 使用线程锁让 for 循环变成原子操作 360
16.4.2 信号量 .361
实例 16.9 创建、获取和释放信号量.362
实例16.10 用信号量与线程锁模拟糖果机 363
16.5 生产者-消费者问题与 queue 模块.365
实例 16.11 生产者-消费者模拟器 365
16.6 多进程 .367
实例16.12 Pool对象与多进程.367
16.7 项目实战:抓取豆瓣音乐 Top250 排行榜(多线程版)368
实例16.13 多线程版抓取音乐 Top250 排行榜爬虫完整实现 369
16.8 项目实战:抓取豆瓣音乐 Top250 排行榜(多进程版)371
实例 16.14 多进程版抓取音乐 Top250 排行榜爬虫完整实现 371
16.9 小结 .373
第 17 章 网络爬虫框架:Scrapy 基础 374
14 分钟
17.1 Scrapy 基础知识 .374
17.1.1 Scrapy 简介 .374
17.1.2 Scrapy 安装 .375
17.1.3 Scrapy Shell 抓取 Web 资源.375
17.2 用 Scrapy 编写网络爬虫 378
17.2.1 创建和使用 Scrapy 工程 378
实例 17.1 使用 Scrapy 创建第一个爬虫程序378
17.2.2 在 PyCharm 中使用 Scrapy.379
17.2.3 在 PyCharm 中使用扩展工具运行 Scrapy 程序 .381
17.2.4 使用 Scrapy 抓取数据,并通过 XPath 指定解析规则382
实例17.2 过滤博文列表.382
17.2.5 将抓取到的数据保存为多种格式的文件 383
实例 17.3 通过 Item 类保存抓取到的数据 .384
17.2.6 使用 ItemLoader 保存单条抓取的数据 385
实例 17.4 用 ItemLoader 对象和 XPath 获取并保存文章相关信息 386
17.2.7 使用 ItemLoader 保存多条抓取的数据 387
实例 17.5 保存博客页面中的所有博客数据 387
17.2.8 抓取多个 URL 389
实例 17.6 抓取多个博客页面的内容.389
17.3 小结 .390
18 Python 爬虫从菜鸟到高手
第 18 章 网络爬虫框架:Scrapy 高级技术 391
18.1 处理登录页面.391
实例 18.1 Scrapy 模拟登录 .391
18.2 处理带隐藏文本框的登录页面.394
实例 18.2 校验字符串.395
18.3 通过 API 抓取天气预报数据 396
实例18.3 抓取天气预报数据.397
18.4 从 CSV 格式转换到 JSON 格式.402
实例18.4 抓取京东商城图像信息,并保存这些信息 403
18.5 下载器中间件.406
实例18.5 模拟浏览器 HTTP 请求头的中间件.408
18.6 爬虫中间件.410
实例 18.6 使用爬虫中间件设置 HTTP 请求头,并修改 HTTP 响应状态码.412
18.7 Item管道.413
实例18.7 使用Item管道抓取美女图片 .414
18.8 通用爬虫.422
实例18.8 抓取中华网的互联网类新闻内容 426
18.9 小结 .430
第 19 章 识别验证码 . 431
13 分钟
19.1 使用 OCR 技术识别图形验证码.431
19.1.1 OCR 技术 432
19.1.2 使用 OCR 技术前的准备工作.432
19.1.3 识别图像中的字符.433
实例19.1 使用image_to_text 函数识别图像中的字符 433
19.1.4 识别二值图像中的字符.433
实例 19.2 使用 point 函数将彩色图像转换为二值图像,再识别其中的字符434
实例19.3 利用NumPy 数组将真色彩图像转换为二值图像,并识别其中的字符435
19.1.5 识别网站中的验证码.436
实例 19.4 使用 selenium 和 OCR 自动登录网站 436
19.2 使用 OpenCV识别滑动验证码的移动距离.438
19.2.1 实现原理 .438
19.2.2 高斯滤波 .439
实例 19.5 使用 GaussianBlur 函数对图像进行高斯滤波处理.439
19.2.3 Canny 边缘检测440
实例 19.6 检测并显示花朵的边缘.441
19.2.4 提取轮廓 .442
19.2.5 绘制轮廓 .442
实例 19.7 绘制蜘蛛的轮廓.443
目录 19
19.2.6 轮廓面积与周长.444
实例 19.8 检测滑动验证码中滑动和缺口的轮廓 444
19.3 小结 .446
第 20 章 综合爬虫项目:可视化爬虫 . 447
20.1 项目简介.447
20.2 主界面设计和实现.448
20.3 获取商品页数和每页商品数.450
20.4 并发抓取商品列表.451
20.5 数据库操作类.453
20.6 情感分析.456
20.7 抓取和分析商品评论数据.456
20.8 可视化评论数据.458
20.9 小结 .460