第1篇基础知识
第1章开发环境配置.2
1.1安装官方的Python运行环境.2
1.2 配置PATH环境变量.5
1.3安装AnacondaPython开发环境.6
1.4安装PyCharm.7
1.5配置PyCharm.8
1.6 小结.10
第2章爬虫基础.11
2.1HTTP基础11
2.1.1 URI和URL11
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 CSS24
2.2.3 CSS选择器.25
2.2.4 JavaScript.27
2.3爬虫的基本原理27
2.3.1 爬虫的分类.27
2.3.2 爬虫抓取数据的方式和手段.28
2.4Session与Cookie.28
2.4.1 静态页面和动态页面.29
2.4.2 无状态HTTP与Cookie30
2.4.3 利用Session和Cookie保持状态.30
2.4.4 查看网站的Cookie31
2.4.5 HTTP状态何时会失效32
CONTENTS目录
2.5 实战案例:抓取所有的网络资源 . 33
2.6 实战案例:抓取博客文章列表 . 37
2.7小结.40
第2篇网络库
第3章网络库urllib.42
3.1 urllib简介42
3.2 发送请求与获得响应.43
3.2.1 用urlopen函数发送HTTPGET请求43
3.2.2 用urlopen函数发送HTTPPOST请求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 读取和设置Cookie56
3.3 异常处理60
3.3.1URLError60
3.3.2HTTPError61
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.1Robots协议简介.67
3.5.2分析Robots协议68
3.6小结.69
第4章网络库urllib3.70
4.1urllib3简介70
4.2urllib3模块70
4.3发送HTTPGET请求71
4.4发送HTTPPOST请求72
4.5HTTP请求头74
4.6HTTP响应头76
4.7上传文件76
4.8超时.78
4.9小结.79
第5章网络库requests.80
5.1基本用法80
5.1.1 requests的HelloWorld81
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 处理Cookie89
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.2Reactor(反应堆)模式.101
6.3HelloWorld,Twisted框架101
6.4用Twisted实现时间戳客户端103
6.5用Twisted实现时间戳服务端104
6.6小结.105
第3篇解析库
第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 项目实战:抓取猫眼电影 Top100榜单 128
7.5 项目实战:抓取糗事百科网的段子 133
7.6小结.136
第8章lxml与XPath.137
8.1lxml基础137
8.1.1 安装lxml137
8.1.2 操作XML.138
8.1.3 操作HTML.140
8.2XPath.141
8.2.1 XPath概述141
8.2.2 使用XPath141
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章BeautifulSoup库.162
9.1BeautifulSoup简介162
9.2BeautifulSoup基础162
9.2.1 安装BeautifulSoup163
9.2.2 选择解析器.164
9.2.3 编写第一个BeautifulSoup程序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.5CSS选择器.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.1pyquery简介.192
10.2pyquery基础.192
10.2.1 安装pyquery.193
10.2.2 pyquery的基本用法193
10.3CSS选择器.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篇数据存储
第11章文件存储222
11.1打开文件.222
11.2 操作文件的基本方法.224
11.2.1 读文件和写文件224
11.2.2 读行和写行.226
11.3 使用FileInput对象读取文件.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.2MySQL数据库.247
12.2.1安装MySQL.247
12.2.2在Python中使用MySQL250
12.3非关系型数据库253
12.3.1NoSQL简介253
12.3.2MongoDB数据库.253
12.3.3pymongo模块.255
12.4 项目实战:抓取豆瓣音乐排行榜 256
12.5 项目实战:抓取豆瓣电影排行榜 260
12.6小结264
第5篇爬虫高级应用
第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安装WebDriver286
14.2.1安装ChromeDriver287
14.2.2装EdgeWebDriver288
14.2.3安装其他浏览器的WebDriver289
14.3Selenium的基本使用方法.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.12小结308
第15章基于Splash的爬虫.309
15.1Splash基础.309
15.1.1Splash功能简介309
15.1.2安装Docker310
15.1.3安装Splash.310
15.2 SplashLua脚本312
15.2.1第一个Lua脚本312
15.2.2异步处理.313
15.2.3Splash对象属性314
15.2.4go方法.318
15.2.5wait方法.319
15.2.6jsfunc方法320
15.2.7evaljs方法320
15.2.8runjs方法.320
15.2.9autoload方法321
15.2.10call_later方法.322
15.2.11http_get方法.323
15.2.12http_post方法.324
15.2.13set_content方法325
15.2.14html方法325
15.2.15png方法326
15.2.16jpeg方法.326
15.2.17har方法326
15.2.18其他方法.327
15.3 使用CSS选择器.331
15.3.1select方法331
15.3.2select_all方法.332
15.4 模拟鼠标和键盘的动作333
15.5 SplashHTTPAPI334
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 使用mitmproxy348
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.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 查找AndroidApp的Package和入口Activity.374
17.2.3 控制App.376
17.3 使用Python控制手机App379
17.4 AppiumPythonClientAPI.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.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 ScrapyShell抓取Web资源.415
19.2 用Scrapy编写网络爬虫417
19.2.1 创建和使用Scrapy工程417
19.2.2 在PyCharm中使用Scrapy419
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.3Scrapy的高级应用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.7Item管道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
JetBrains大中华区市场部经理赵磊作序!超过300个实战案例,10万行源代码,22个综合实战项目,海量学习资料,1000套中英文简历模板。全书内容涵盖:
李宁 “私房菜谱”Python爬虫基础知识Python网络库Python解析库Python数据存储Python异步数据抓取Python移动App数据抓取Python可见即可爬Python Scrapy实战Python项目实战李宁“实战项目”抓取小说目录与正文抓取豆瓣网图书榜单抓取房屋租赁信息抓取豆瓣网音乐排行榜
知识图谱04教学资源
本书提供程序代码,可以通过清华大学出版社官方网站下载获取。
05专家点评
《Python爬虫技术——深入理解原理、技术与开发》一书诠释了Python爬虫的核心开发技术。不管是“菜鸟”,还是“高手”,都可从本书受益。更难能可贵的是,本书提供了大量的实战案例,通过各种爬虫技术抓取的不同种类的信息和实战,读者可以更好地掌握爬虫应用的编写过程。
——金晓颖 触控科技有限公司副总裁
李宁是51CTO学院金牌讲师、51CTO学院专家级博主,在IT技术领域有很深的造诣。他授课风趣幽默,讲解条理清晰、通俗易懂,对如何学习编程技术有独到见解。他在51CTO学院已开设了150多门视频课程,学员达130多万人,视频课程广受好评。一个如此受欢迎的老师,他编写的图书也非常值得阅读。更重要的是,本书配套提供了大量的实战项目、源代码、练习题,能方便读者快速实践,所以强烈推荐此书!
——曹亚莉 51CTO学院教学总监
看到李宁老师的30多本图书和150多门视频课程,我不禁惊叹于他如此强大的能力、精力和毅力。在51CTO学院,李宁老师的听课人数达到130多万。他编写的图书更是紧跟IT技术发展潮流,这本《Python爬虫技术——深入理解原理、技术与开发》也是顺应时代发展的大作。全书内容涵盖了基础知识、高级编程、理论知识与典型应用,是学习Python编程的优秀教材。
——韩立刚 51CTO学院金牌讲师
《Python爬虫技术——深入理解原理、技术与开发》一书体现了李宁老师一贯的个人教学风格。书中知识全面、案例丰富,是Python初学者难得的入门好书!推荐阅读!
——谢星星(网名阿蜜果) 软通动力资深架构师
李宁老师工作勤奋,技术精湛。他录制了大量优秀的IT视频课程,Python视频课程是其中的代表作。Python是目前最受欢迎的编程语言,而Python爬虫是Python应用最火的领域。毫无疑问,《Python爬虫技术——深入理解原理、技术与开发》是一本最佳的Python爬虫实践指南。
——朱有鹏 朱老师物联网大讲堂创始人
《Python爬虫技术——深入理解原理、技术与开发》是一本经典的Python爬虫高级教程,本书层次鲜明、结构严谨、内容翔实,可以带领读者快速掌握Python爬虫的核心知识,帮助读者编写解决实际问题的代码并开发复杂项目。
——江清清 嘎嘎软件科技公司总经理
06京东阅读
07图书赠送
您若是教师,可按以下方式申请图书
(3)申请人须是普通高校教师并担任所申请样书对应课程,申请表中需要上传相近课程的教学大纲证明身份。
您若不是教师,可按以下方式图书抽奖
注:图书申请长期有效;由于库房变动,图书将于7月初陆续寄送。