精通Python爬虫框架Scrapy.pdf

精通Python爬虫框架Scrapy.pdf

精通Python爬虫框架Scrapy.pdf


PDF: https://github.com/jash-git/Jash-good-idea-20200304-001

第1 章 Scrapy 簡介 1
1.1 初識Scrapy…………………………………………………………………………………………………1
1.2 喜歡Scrapy 的更多理由………………………………………………………………………………2
1.3 關於本書:目標和用途………………………………………………………………………………..3
1.4 掌握自動化資料爬取的重要性……………………………………………………………………..4
1.4.1 開發健壯且高品質的應用,並提供合理規劃……………………………………..4
1.4.2 快速開發高品質最小可行產品…………………………………………………………..5
1.4.3 Google 不會使用表單,爬取才能擴大規模………………………………………..6
1.4.4 發現並融入你的生態系統………………………………………………………………….7
1.5 在充滿爬蟲的世界裡做一個好公民………………………………………………………………7
1.6 Scrapy 不是什麼………………………………………………………………………………………….8
1.7 本章小結……………………………………………………………………………………………………..9
第2 章 理解HTML 和XPath 10
2.1 HTML、DOM 樹表示以及XPath ……………………………………………………………..10
2.1.1 URL……………………………………………………………………………………………….11
2.1.2 HTML 文檔……………………………………………………………………………………11
2.1.3 樹標記法………………………………………………………………………………………..13
2.1.4 你會在螢幕上看到什麼……………………………………………………………………14
2.2 使用XPath 選擇HTML 元素…………………………………………………………………….15
2.2.1 有用的XPath 運算式………………………………………………………………………16
非同步社區會員 Kensuke(18319066421) 專享 尊重版權
目錄
2
2.2.2 使用Chrome 獲取XPath 運算式…………………………………………………….19
2.2.3 常見任務示例…………………………………………………………………………………20
2.2.4 預見變化………………………………………………………………………………………..21
2.3 本章小結……………………………………………………………………………………………………22
第3 章 爬蟲基礎 23
3.1 安裝Scrapy……………………………………………………………………………………………….24
3.1.1 MacOS …………………………………………………………………………………………..24
3.1.2 Windows ………………………………………………………………………………………..25
3.1.3 Linux ……………………………………………………………………………………………..25
3.1.4 最新源碼安裝…………………………………………………………………………………26
3.1.5 升級Scrapy ……………………………………………………………………………………26
3.1.6 Vagrant:本書中運行示例的官方方式…………………………………………….27
3.2 UR2IM——基本抓取流程…………………………………………………………………………..28
3.2.1 URL……………………………………………………………………………………………….29
3.2.2 請求和回應…………………………………………………………………………………….31
3.2.3 Item ……………………………………………………………………………………………….31
3.3 一個Scrapy 項目……………………………………………………………………………………….37
3.3.1 聲明item………………………………………………………………………………………..38
3.3.2 編寫爬蟲………………………………………………………………………………………..40
3.3.3 填充item………………………………………………………………………………………..43
3.3.4 保存檔………………………………………………………………………………………..45
3.3.5 清理——item 裝載器與管理欄位…………………………………………………….47
3.3.6 創建contract ………………………………………………………………………………….50
3.4 抽取更多的URL ……………………………………………………………………………………….53
3.4.1 使用爬蟲實現雙向爬取……………………………………………………………………56
3.4.2 使用CrawlSpider 實現雙向爬取……………………………………………………..59
3.5 本章小結……………………………………………………………………………………………………61
非同步社區會員 Kensuke(18319066421) 專享 尊重版權
目錄
3
第4 章 從Scrapy 到移動應用 62
4.1 選擇手機應用框架……………………………………………………………………………………..62
4.2 創建資料庫和集合……………………………………………………………………………………..63
4.3 使用Scrapy 填充資料庫…………………………………………………………………………….65
4.4 創建手機應用…………………………………………………………………………………………….68
4.4.1 創建資料庫訪問服務………………………………………………………………………69
4.4.2 創建使用者介面…………………………………………………………………………………69
4.4.3 將資料映射到使用者介面……………………………………………………………………70
4.4.4 資料庫欄位與使用者介面控制項間映射………………………………………………….71
4.4.5 測試、分享及匯出你的手機應用……………………………………………………..72
4.5 本章小結……………………………………………………………………………………………………73
第5 章 迅速的爬蟲技巧 75
5.1 需要登錄的爬蟲…………………………………………………………………………………………75
5.2 使用JSON API 和AJAX 頁面的爬蟲………………………………………………………..81
5.3 30 倍速的房產爬蟲…………………………………………………………………………………….85
5.4 基於Excel 文件爬取的爬蟲………………………………………………………………………..90
5.5 本章小結……………………………………………………………………………………………………93
第6 章 部署到Scrapinghub 94
6.1 註冊、登錄及創建項目………………………………………………………………………………94
6.2 部署爬蟲與計畫運行………………………………………………………………………………….96
6.3 訪問item…………………………………………………………………………………………………..99
6.4 計畫定時爬取…………………………………………………………………………………………..100
6.5 本章小結………………………………………………………………………………………………….101
第7 章 配置與管理 102
7.1 使用Scrapy 設置……………………………………………………………………………………..102
7.2 基本設置………………………………………………………………………………………………….103
非同步社區會員 Kensuke(18319066421) 專享 尊重版權
目錄
4
7.2.1 分析……………………………………………………………………………………………..104
7.2.2 性能……………………………………………………………………………………………..107
7.2.3 提前終止爬取……………………………………………………………………………….108
7.2.4 HTTP 緩存和離線運行………………………………………………………………….108
7.2.5 爬取風格………………………………………………………………………………………109
7.2.6 feed ………………………………………………………………………………………………110
7.2.7 媒體下載………………………………………………………………………………………111
7.2.8 Amazon Web 服務………………………………………………………………………..113
7.2.9 使用代理和爬蟲……………………………………………………………………………113
7.3 進階設置………………………………………………………………………………………………….114
7.3.1 專案相關設置……………………………………………………………………………….115
7.3.2 Scrapy 擴展設置…………………………………………………………………………..116
7.3.3 下載調優………………………………………………………………………………………116
7.3.4 自動限速擴展設置………………………………………………………………………..117
7.3.5 記憶體使用擴展設置………………………………………………………………………..117
7.3.6 日誌和調試…………………………………………………………………………………..117
7.4 本章小結………………………………………………………………………………………………….118
第8 章 Scrapy 程式設計 119
8.1 Scrapy 是一個Twisted 應用……………………………………………………………………..119
8.1.1 延遲和延遲鏈……………………………………………………………………………….122
8.1.2 理解Twisted 和非阻塞I/O——一個Python 故事…………………………..125
8.2 Scrapy 架構概述………………………………………………………………………………………132
8.3 示例1:非常簡單的管道………………………………………………………………………….135
8.4 信號…………………………………………………………………………………………………………136
8.5 示例2:測量輸送量和延時的擴展……………………………………………………………138
8.6 中介軟體延伸………………………………………………………………………………………………141
8.7 本章小結………………………………………………………………………………………………….144
非同步社區會員 Kensuke(18319066421) 專享 尊重版權
目錄
5
第9 章 管道秘訣 145
9.1 使用REST API………………………………………………………………………………………..146
9.1.1 使用treq ………………………………………………………………………………………146
9.1.2 用於寫入Elasticsearch 的管道………………………………………………………146
9.1.3 使用Google Geocoding API 實現地理編碼的管道………………………….149
9.1.4 在Elasticsearch 中啟用地理編碼索引……………………………………………156
9.2 與標準Python 用戶端建立資料庫介面……………………………………………………..157
9.3 使用Twisted 專用用戶端建立服務介面…………………………………………………….161
9.4 為CPU 密集型、阻塞或遺留功能建立介面………………………………………………166
9.4.1 處理CPU 密集型或阻塞操作的管道……………………………………………..166
9.4.2 使用二進位或腳本的管道………………………………………………………………168
9.5 本章小結………………………………………………………………………………………………….172
第10 章 理解Scrapy 性能 173
10.1 Scrapy 引擎——一種直觀方式……………………………………………………………….173
10.1.1 級聯佇列系統……………………………………………………………………………..175
10.1.2 定義瓶頸…………………………………………………………………………………….176
10.1.3 Scrapy 性能模型…………………………………………………………………………176
10.2 使用telnet 獲得元件利用率……………………………………………………………………178
10.3 基準系統………………………………………………………………………………………………..180
10.4 標準性能模型…………………………………………………………………………………………182
10.5 解決性能問題…………………………………………………………………………………………185
10.5.1 案例 #1:CPU 飽和……………………………………………………………………185
10.5.2 案例 #2:代碼阻塞…………………………………………………………………….187
10.5.3 案例 #3:下載器中的“垃圾”……………………………………………………188
10.5.4 案例 #4:大量回應或超長回應造成的溢出………………………………….191
10.5.5 案例 #5:有限/過度item 併發造成的溢出…………………………………..193
10.5.6 案例 #6:下載器未充分利用……………………………………………………….194
非同步社區會員 Kensuke(18319066421) 專享 尊重版權
目錄
6
10.6 故障排除流程…………………………………………………………………………………………197
10.7 本章小結………………………………………………………………………………………………..198
第11 章 使用Scrapyd 與即時分析進行分散式爬取 199
11.1 房產的標題是如何影響價格的………………………………………………………………..200
11.2 Scrapyd………………………………………………………………………………………………….200
11.3 分散式系統概述……………………………………………………………………………………..203
11.4 爬蟲和中介軟體的變化………………………………………………………………………………205
11.4.1 索引頁分片爬取…………………………………………………………………………..205
11.4.2 分批爬取URL …………………………………………………………………………….207
11.4.3 從設置中獲取初始URL ………………………………………………………………211
11.4.4 在Scrapyd 伺服器中部署專案……………………………………………………..213
11.5 創建自訂監控命令………………………………………………………………………………215
11.6 使用Apache Spark 流計算偏移量…………………………………………………………..216
11.7 運行分散式爬取……………………………………………………………………………………..218
11.8 系統性能………………………………………………………………………………………………..220
11.9 關鍵要點………………………………………………………………………………………………..221
11.10 本章小結………………………………………………………………………………………………221
附錄A 必備軟體的安裝與故障排除 222
非同步社區會員 Kensuke(18319066421) 專享 尊重版權

第1 章 Scrapy 简介 1
1.1 初识Scrapy…………………………………………………………………………………………………1
1.2 喜欢Scrapy 的更多理由………………………………………………………………………………2
1.3 关于本书:目标和用途………………………………………………………………………………..3
1.4 掌握自动化数据爬取的重要性……………………………………………………………………..4
1.4.1 开发健壮且高质量的应用,并提供合理规划……………………………………..4
1.4.2 快速开发高质量最小可行产品…………………………………………………………..5
1.4.3 Google 不会使用表单,爬取才能扩大规模………………………………………..6
1.4.4 发现并融入你的生态系统………………………………………………………………….7
1.5 在充满爬虫的世界里做一个好公民………………………………………………………………7
1.6 Scrapy 不是什么………………………………………………………………………………………….8
1.7 本章小结……………………………………………………………………………………………………..9
第2 章 理解HTML 和XPath 10
2.1 HTML、DOM 树表示以及XPath ……………………………………………………………..10
2.1.1 URL……………………………………………………………………………………………….11
2.1.2 HTML 文档……………………………………………………………………………………11
2.1.3 树表示法………………………………………………………………………………………..13
2.1.4 你会在屏幕上看到什么……………………………………………………………………14
2.2 使用XPath 选择HTML 元素…………………………………………………………………….15
2.2.1 有用的XPath 表达式………………………………………………………………………16
异步社区会员 Kensuke(18319066421) 专享 尊重版权
目录
2
2.2.2 使用Chrome 获取XPath 表达式…………………………………………………….19
2.2.3 常见任务示例…………………………………………………………………………………20
2.2.4 预见变化………………………………………………………………………………………..21
2.3 本章小结……………………………………………………………………………………………………22
第3 章 爬虫基础 23
3.1 安装Scrapy……………………………………………………………………………………………….24
3.1.1 MacOS …………………………………………………………………………………………..24
3.1.2 Windows ………………………………………………………………………………………..25
3.1.3 Linux ……………………………………………………………………………………………..25
3.1.4 最新源码安装…………………………………………………………………………………26
3.1.5 升级Scrapy ……………………………………………………………………………………26
3.1.6 Vagrant:本书中运行示例的官方方式…………………………………………….27
3.2 UR2IM——基本抓取流程…………………………………………………………………………..28
3.2.1 URL……………………………………………………………………………………………….29
3.2.2 请求和响应…………………………………………………………………………………….31
3.2.3 Item ……………………………………………………………………………………………….31
3.3 一个Scrapy 项目……………………………………………………………………………………….37
3.3.1 声明item………………………………………………………………………………………..38
3.3.2 编写爬虫………………………………………………………………………………………..40
3.3.3 填充item………………………………………………………………………………………..43
3.3.4 保存文件………………………………………………………………………………………..45
3.3.5 清理——item 装载器与管理字段…………………………………………………….47
3.3.6 创建contract ………………………………………………………………………………….50
3.4 抽取更多的URL ……………………………………………………………………………………….53
3.4.1 使用爬虫实现双向爬取……………………………………………………………………56
3.4.2 使用CrawlSpider 实现双向爬取……………………………………………………..59
3.5 本章小结……………………………………………………………………………………………………61
异步社区会员 Kensuke(18319066421) 专享 尊重版权
目录
3
第4 章 从Scrapy 到移动应用 62
4.1 选择手机应用框架……………………………………………………………………………………..62
4.2 创建数据库和集合……………………………………………………………………………………..63
4.3 使用Scrapy 填充数据库…………………………………………………………………………….65
4.4 创建手机应用…………………………………………………………………………………………….68
4.4.1 创建数据库访问服务………………………………………………………………………69
4.4.2 创建用户界面…………………………………………………………………………………69
4.4.3 将数据映射到用户界面……………………………………………………………………70
4.4.4 数据库字段与用户界面控件间映射………………………………………………….71
4.4.5 测试、分享及导出你的手机应用……………………………………………………..72
4.5 本章小结……………………………………………………………………………………………………73
第5 章 迅速的爬虫技巧 75
5.1 需要登录的爬虫…………………………………………………………………………………………75
5.2 使用JSON API 和AJAX 页面的爬虫………………………………………………………..81
5.3 30 倍速的房产爬虫…………………………………………………………………………………….85
5.4 基于Excel 文件爬取的爬虫………………………………………………………………………..90
5.5 本章小结……………………………………………………………………………………………………93
第6 章 部署到Scrapinghub 94
6.1 注册、登录及创建项目………………………………………………………………………………94
6.2 部署爬虫与计划运行………………………………………………………………………………….96
6.3 访问item…………………………………………………………………………………………………..99
6.4 计划定时爬取…………………………………………………………………………………………..100
6.5 本章小结………………………………………………………………………………………………….101
第7 章 配置与管理 102
7.1 使用Scrapy 设置……………………………………………………………………………………..102
7.2 基本设置………………………………………………………………………………………………….103
异步社区会员 Kensuke(18319066421) 专享 尊重版权
目录
4
7.2.1 分析……………………………………………………………………………………………..104
7.2.2 性能……………………………………………………………………………………………..107
7.2.3 提前终止爬取……………………………………………………………………………….108
7.2.4 HTTP 缓存和离线运行………………………………………………………………….108
7.2.5 爬取风格………………………………………………………………………………………109
7.2.6 feed ………………………………………………………………………………………………110
7.2.7 媒体下载………………………………………………………………………………………111
7.2.8 Amazon Web 服务………………………………………………………………………..113
7.2.9 使用代理和爬虫……………………………………………………………………………113
7.3 进阶设置………………………………………………………………………………………………….114
7.3.1 项目相关设置……………………………………………………………………………….115
7.3.2 Scrapy 扩展设置…………………………………………………………………………..116
7.3.3 下载调优………………………………………………………………………………………116
7.3.4 自动限速扩展设置………………………………………………………………………..117
7.3.5 内存使用扩展设置………………………………………………………………………..117
7.3.6 日志和调试…………………………………………………………………………………..117
7.4 本章小结………………………………………………………………………………………………….118
第8 章 Scrapy 编程 119
8.1 Scrapy 是一个Twisted 应用……………………………………………………………………..119
8.1.1 延迟和延迟链……………………………………………………………………………….122
8.1.2 理解Twisted 和非阻塞I/O——一个Python 故事…………………………..125
8.2 Scrapy 架构概述………………………………………………………………………………………132
8.3 示例1:非常简单的管道………………………………………………………………………….135
8.4 信号…………………………………………………………………………………………………………136
8.5 示例2:测量吞吐量和延时的扩展……………………………………………………………138
8.6 中间件延伸………………………………………………………………………………………………141
8.7 本章小结………………………………………………………………………………………………….144
异步社区会员 Kensuke(18319066421) 专享 尊重版权
目录
5
第9 章 管道秘诀 145
9.1 使用REST API………………………………………………………………………………………..146
9.1.1 使用treq ………………………………………………………………………………………146
9.1.2 用于写入Elasticsearch 的管道………………………………………………………146
9.1.3 使用Google Geocoding API 实现地理编码的管道………………………….149
9.1.4 在Elasticsearch 中启用地理编码索引……………………………………………156
9.2 与标准Python 客户端建立数据库接口……………………………………………………..157
9.3 使用Twisted 专用客户端建立服务接口…………………………………………………….161
9.4 为CPU 密集型、阻塞或遗留功能建立接口………………………………………………166
9.4.1 处理CPU 密集型或阻塞操作的管道……………………………………………..166
9.4.2 使用二进制或脚本的管道………………………………………………………………168
9.5 本章小结………………………………………………………………………………………………….172
第10 章 理解Scrapy 性能 173
10.1 Scrapy 引擎——一种直观方式……………………………………………………………….173
10.1.1 级联队列系统……………………………………………………………………………..175
10.1.2 定义瓶颈…………………………………………………………………………………….176
10.1.3 Scrapy 性能模型…………………………………………………………………………176
10.2 使用telnet 获得组件利用率……………………………………………………………………178
10.3 基准系统………………………………………………………………………………………………..180
10.4 标准性能模型…………………………………………………………………………………………182
10.5 解决性能问题…………………………………………………………………………………………185
10.5.1 案例 #1:CPU 饱和……………………………………………………………………185
10.5.2 案例 #2:代码阻塞…………………………………………………………………….187
10.5.3 案例 #3:下载器中的“垃圾”……………………………………………………188
10.5.4 案例 #4:大量响应或超长响应造成的溢出………………………………….191
10.5.5 案例 #5:有限/过度item 并发造成的溢出…………………………………..193
10.5.6 案例 #6:下载器未充分利用……………………………………………………….194
异步社区会员 Kensuke(18319066421) 专享 尊重版权
目录
6
10.6 故障排除流程…………………………………………………………………………………………197
10.7 本章小结………………………………………………………………………………………………..198
第11 章 使用Scrapyd 与实时分析进行分布式爬取 199
11.1 房产的标题是如何影响价格的………………………………………………………………..200
11.2 Scrapyd………………………………………………………………………………………………….200
11.3 分布式系统概述……………………………………………………………………………………..203
11.4 爬虫和中间件的变化………………………………………………………………………………205
11.4.1 索引页分片爬取…………………………………………………………………………..205
11.4.2 分批爬取URL …………………………………………………………………………….207
11.4.3 从设置中获取初始URL ………………………………………………………………211
11.4.4 在Scrapyd 服务器中部署项目……………………………………………………..213
11.5 创建自定义监控命令………………………………………………………………………………215
11.6 使用Apache Spark 流计算偏移量…………………………………………………………..216
11.7 运行分布式爬取……………………………………………………………………………………..218
11.8 系统性能………………………………………………………………………………………………..220
11.9 关键要点………………………………………………………………………………………………..221
11.10 本章小结………………………………………………………………………………………………221
附录A 必备软件的安装与故障排除 222
异步社区会员 Kensuke(18319066421) 专享 尊重版权

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *