python爬虫技术深入理解原理会讲python嘛_Python爬虫技术——深入理解原理、技术与开发...

第 1篇基础知识

第 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

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函数发送 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 发送 HTTP POST请求 .................................... 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篇解析库

第 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.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篇数据存储

第 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.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篇爬虫高级应用

第 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值