第1篇 基础知识 2
第1章 开发环境配置 2
1.1安装官方的Python运行环境 2
1.2配置PATH环境变量 5
1.3安装Anaconda Python开发环境 6
1.4安装PyCharm 7
1.5配置PyCharm 8
1.6小结 10
第2章 爬虫基础 11
2.1 HTTP基础 11
2.1.1 URI和URL 11
2.1.2超文本 12
2.1.3 HTTP与HTTPS 12
2.1.4 HTTP的请求过程 15
2.1.5请求 17
2.1.6响应 20
2.2网页基础 23
2.2.1 HTML 23
2.2.2 CSS 24
2.2.3 CSS选择器 25
2.2.4 JavaScript 27
2.3爬虫的基本原理 27
2.3.1爬虫的分类 27
2.3.2爬虫抓取数据的方式和手段 28
2.4 Session与Cookie 28
2.4.1静态页面和动态页面 29
2.4.2无状态HTTP与Cookie 30
2.4.3利用Session和Cookie保持状态 30
2.4.4查看网站的Cookie 31
2.4.5 HTTP状态何时会失效 32
2.5实战案例:抓取所有的网络资源 33
2.6实战案例:抓取博客文章列表 37
2.7小结 40
第2篇 网络库 42
第3章 网络库urllib 42
3.1 urllib简介 42
3.2发送请求与获得响应 43
3.2.1用urlopen函数发送HTTP GET请求 43
3.2.2用urlopen函数发送HTTP POST请求 44
3.2.3请求超时 45
3.2.4设置HTTP请求头 46
3.2.5设置中文HTTP请求头 48
3.2.6请求基础验证页面 50
3.2.7搭建代理与使用代理 54
3.2.8读取和设置Cookie 56
3.3异常处理 60
3.3.1 URLError 60
3.3.2 HTTPError 61
3.4解析链接 62
3.4.1拆分与合并URL(urlparse与urlunparse) 62
3.4.2另一种拆分与合并URL的方式(urlsplit与urlunsplit) 63
3.4.3连接URL (urljoin) 65
3.4.4 URL编码(urlencode) 65
3.4.5编码与解码(quote与unquote) 66
3.4.6参数转换(parse_qs与parse_qsl) 66
3.5 Robots协议 67
3.5.1 Robots协议简介 67
3.5.2分析Robots协议 68
3.6小结 69
第4章 网络库urllib3 70
4.1 urllib3简介 70
4.2 urllib3模块 70
4.3发送HTTP GET请求 71
4.4发送HTTPPOST请求 72
4.5 HTTP请求头 74
4.6 HTTP响应头 76
4.7上传文件 76
4.8超时 78
4.9小结 79
第5章 网络库requests 80
5.1基本用法 80
5.1.1 requests的HelloWorld 81
5.1.2 GET请求 81
5.1.3添加HTTP请求头 82
5.1.4抓取二进制数据 83
5.1.5 POST请求 84
5.1.6响应数据 85
5.2高级用法 87
5.2.1上传文件 88
5.2.2处理Cookie 89
5.2.3使用同一个会话(Session) 90
5.2.4 SSL证书验证 91
5.2.5使用代理 94
5.2.6超时 95
5.2.7身份验证 97
5.2.8将请求打包 97
5.3小结 98
第6章 Twisted网络框架 99
6.1异步编程模型 99
6.2 Reactor(反应堆)模式 101
6.3 HelloWorld, Twisted框架 101
6.4用Twisted实现时间戳客户端 103
6.5用Twisted实现时间戳服务端 104
6.6小结 105
第3篇 解析库 108
第7章 正则表达式 108
7.1使用正则表达式 108
7.1.1使用match方法匹配字符串 108
7.1.2使用search方法在一个字符串中查找模式 109
7.1.3匹配多个字符串 110
7.1.4匹配任何单个字符 111
7.1.5使用字符集 112
7.1.6重复、可选和特殊字符 114
7.1.7分组 117
7.1.8匹配字符串的起始和结尾以及单词边界 118
7.1.9使用findall和finditer查找每一次出现的位置 120
7.1.10用sub和subn搜索与替换 121
7.1.11使用split分隔字符串 122
7.2一些常用的正则表达式 123
7.3项目实战:抓取小说目录和全文 124
7.4项目实战:抓取猫眼电影Top 100榜单 128
7.5项目实战:抓取糗事百科网的段子 133
7.6小结 136
第8章 Ixml与XPath 137
8.1 lxml基础 137
8.1.1安装lxml 137
8.1.2操作XML 138
8.1.3操作HTML 140
8.2 XPath 141
8.2.1 XPath概述 141
8.2.2使用XPath 141
8.2.3选取所有节点 143
8.2.4选取子节点 145
8.2.5选取父节点 146
8.2.6属性匹配与获取 146
8.2.7多属性匹配 147
8.2.8按序选择节点 148
8.2.9节点轴选择 149
8.2.10在Chrome中自动获得XPath代码 151
8.2.11使用Chrome验证XPath 153
8.3项目实战:抓取豆瓣Top250图书榜单 154
8.4项目实战:抓取起点中文网的小说信息 158
8.5小结 161
第9章 Beautiful Soup库 162
9.1 Beautiful Soup简介 162
9.2 Beautiful Soup基础 162
9.2.1安装Beautiful Soup 163
9.2.2选择解析器 164
9.2.3编写第一个Beautiful Soup程序 164
9.3节点选择器 165
9.3.1选择节点 165
9.3.2嵌套选择节点 167
9.3.3选择子节点 168
9.3.4选择父节点 171
9.3.5选择兄弟节点 172
9.4方法选择器 174
9.4.1 find all方法 174
9.4.2 find方法 177
9.5 CSS选择器 178
9.5.1基本用法 179
9.5.2嵌套选择节点 180
9.5.3获取属性值与文本 181
9.5.4通过浏览器获取CSS选择器代码 182
9.6实战案例:抓取租房信息 184
9.7实战案例:抓取酷狗网络红歌榜 188
9.8小结 191
第10章 pyquery库 192
10.1 pyquery简介 192
10.2 pyquery基础 192
10.2.1安装pyquery 193
10.2.2 pyquery的基本用法 193
10.3 CSS选择器 194
10.4查找节点 196
10.4.1查找子节点 196
10.4.2查找父节点 197
10.4.3查找兄弟节点 198
10.4.4获取节点信息 199
10.5修改节点 203
10.5.1添加和移除节点的样式(addClass和removeClass) 204
10.5.2修改节点属性和文本内容(attr、 removeAttr、 text和html) 205
10.5.3删除节点(remove) 207
10.6伪类选择器 208
10.7项目实战:抓取当当图书排行榜 210
10.8项目实战:抓取京东商城手机销售排行榜 213
10.9小结 219
第4篇 数据存储 222
第11章 文件存储 222
11.1打开文件 222
11.2操作文件的基本方法 224
11.2.1读文件和写文件 224
11.2.2读行和写行 226
11.3使用Filelnput对象读取文件 227
11.4处理XML格式的数据 228
11.4.1读取与搜索XML文件 228
11.4.2字典转换为XML字符串 229
11.4.3 XML字符串转换为字典 231
11.5处理JSON格式的数据 232
11.5.1 JSON字符串与字典互相转换 233
11.5.2将JSON字符串转换为类实例 234
11.5.3将类实例转换为JSON字符串 236
11.5.4类实例列表与JSON字符串互相转换 236
11.6将JSON字符串转换为XML字符串 237
11.7 CSV文件存储 238
11.7.1写入CSV文件 238
11.7.2读取CSV文件 241
11.8小结 241
第12章 数据库存储 242
12.1 SQLite数据库 242
12.1.1管理SQLite数据库 243
12.1.2用Python操作SQLite数据库 245
12.2 MySQL数据库 247
12.2.1安装MySQL 247
12.2.2在Python中使用MySQL 250
12.3非关系型数据库 253
12.3.1 NoSQL简介 253
12.3.2 MongoDB数据库 253
12.3.3 pymongo模块 255
12.4项目实战:抓取豆瓣音乐排行榜 256
12.5项目实战:抓取豆瓣电影排行榜 260
12.6小结 264
第5篇 爬虫高级应用 266
第13章 抓取异步数据 266
13.1异步加载与AJAX 266
13.2基本原理 267
13.3逆向工程 270
13.4提取结果 274
13.5项目实战:支持搜索功能的图片爬虫 274
13.6项目实战:抓取京东图书评价 279
13.7小结 284
第14章 可见即可爬:Selenium 285
14.1安装Selenium 286
14.2安装WebDriver 286
14.2.1安装ChromeDriver 287
14.2.2装Edge WebDriver 288
14.2.3安装其他浏览器的WebDriver 289
14.3 Selenium的基本使用方法 289
14.4查找节点 293
14.4.1查找单个节点 293
14.4.2查找多个节点 295
14.5节点交互 297
14.6动作链 298
14.7执行JavaScript代码 301
14.8获取节点信息 302
14.9管理Cookies 303
14.10改变节点的属性值 304
14.11项目实战:抓取QQ空间说说的内容 306
14.12小结 308
第15章 基于Splash的爬虫 309
15.1 Splash基础 309
15.1.1 Splash功能简介 309
15.1.2安装Docker 310
15.1.3安装Splash 310
15.2 Splash Lua脚本 312
15.2.1第一个Lua脚本 312
15.2.2异步处理 313
15.2.3 Splash对象属性 314
15.2.4 go方法 318
15.2.5 wait方法 319
15.2.6 jsfunc方法 320
15.2.7 evaljs方法 320
15.2.8 runjs方法 320
15.2.9 autoload方法 321
15.2.10 call_later方法 322
15.2.11 http_get方法 323
15.2.12 http_post方法 324
15.2.13 set_content方法 325
15.2.14 html方法 325
15.2.15 png方法 326
15.2.16 jpeg方法 326
15.2.17 har方法 326
15.2.18其他方法 327
15.3使用CSS选择器 331
15.3.1 select方法 331
15.3.2 select_all方法 332
15.4模拟鼠标和键盘的动作 333
15.5 Splash HTTP API 334
15.6项目实战:使用Splash Lua抓取京东搜索结果 338
15.7小结 340
第16章 抓取移动App的数据 341
16.1使用Charles 341
16.1.1抓取HTTP数据包 342
16.1.2安装PC端证书 344
16.1.3在手机端安装证书 345
16.1.4监听HTTPS数据包 346
16.2使用mitmproxy 348
16.2.1安装mitmproxy 348
16.2.2在PC端安装mitmproxy证书 349
16.2.3在移动端安装mitmproxy证书 352
16.2.4 mitmproxy有哪些功能 353
16.2.5设置手机的代理 353
16.2.6用mitmproxy监听App的请求与响应数据 354
16.2.7使用mitmproxy编辑请求信息 356
16.2.8 mitmdump与Python对接 357
16.2.9使用mitmweb监听请求与响应 361
16.3项目实战:实时抓取“得到”App在线课程 363
16.4小结 367
第17章 使用Appium在移动端抓取数据 368
17.1安装Appium 368
17.1.1安装Appium桌面端 368
17.1.2配置Android开发环境 370
17.1.3配置iOS开发环境 371
17.2 Appium的基本使用方法 372
17.2.1启动Appium服务 372
17.2.2查找Android App的Package和入口Activity 374
17.2.3控制App 376
17.3使用Python控制手机App 379
17.4 AppiumPythonClient API 380
17.4.1初始化(Remote类) 380
17.4.2查找元素 381
17.4.3单击元素 381
17.4.4屏幕拖动 382
17.4.5屏幕滑动 382
17.4.6拖曳操作 383
17.4.7文本输入 383
17.4.8动作链 383
17.5项目实战:利用Appium抓取微信朋友圈信息 384
17.6小结 388
第18章 多线程和多进程爬虫 389
18.1线程与进程 389
18.1.1进程 389
18.1.2线程 390
18.2 Python与线程 390
18.2.1使用单线程执行程序 390
18.2.2使用多线程执行程序 391
18.2.3为线程函数传递参数 393
18.2.4线程和锁 394
18.3高级线程模块(threading) 395
18.3.1 Thread类与线程函数 395
18.3.2 Thread类与线程对象 396
18.3.3从Thread类继承 398
18.4线程同步 399
18.4.1线程锁 400
18.4.2信号量 402
18.5生产者—消费者问题与queue模块 405
18.6多进程 407
18.7项目实战:抓取豆瓣音乐Top250排行榜(多线程版) 408
18.8项目实战:抓取豆瓣音乐Top250排行榜(多进程版) 411
18.9小结 412
第19章 网络爬虫框架:Scrapy 413
19.1 Scrapy基础知识 413
19.1.1 Scrapy简介 413
19.1.2 Scrapy安装 414
19.1.3 Scrapy Shell抓取Web资源 415
19.2用Scrapy编写网络爬虫 417
19.2.1创建和使用Scrapy工程 417
19.2.2在PyCharm中使用Scrapy 419
19.2.3在PyCharm中使用扩展工具运行Scrapy程序 421
19.2.4使用Scrapy抓取数据,并通过XPath指定解析规则 423
19.2.5将抓取到的数据保存为多种格式的文件 424
19.2.6使用ItemLoader保存单条抓取的数据 426
19.2.7使用ItemLoader保存多条抓取的数据 428
19.2.8抓取多个URL 430
19.3 Scrapy的高级应用 431
19.3.1处理登录页面 431
19.3.2处理带隐藏文本框的登录页面 434
19.3.3通过API抓取天气预报数据 436
19.3.4从CSV格式转换到JSON格式 443
19.3.5下载器中间件 447
19.3.6爬虫中间件 452
19.3.7 Item管道 455
19.3.8通用爬虫 465
19.4小结 474
第20章 综合爬虫项目:可视化爬虫 475
20.1项目简介 475
20.2主界面设计和实现 477
20.3获取商品页数和每页商品数 478
20.4并发抓取商品列表 479
20.5数据库操作类 481
20.6情感分析 484
20.7抓取和分析商品评论数据 485
20.8可视化评论数据 486
20.9小结 488