python网络爬虫技术(解读python网络爬虫的基本原理)

python网络爬虫技术(解读python网络爬虫的基本原理)

第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月初陆续寄送。

发表评论

登录后才能评论