网络爬虫是一种按照一定的规则,自动请求万维网互联网网站并抓取采集网页数据的程序或脚本。它可以代替人进行信息采集,能够自动采集并高效利用互联网中的数据,因此在市场的应用需求中占据重要位置。
本书以Windows为主要开发平台,系统、全面地讲解Python网络爬虫的相关知识。本书的主要内容包括认识网络爬虫、网页请求原理、抓取静态网页数据、解析网页数据、抓取动态网页数据、提升网络爬虫速度、存储数据、验证码识别、初识网络爬虫框架Scrapy、Scrapy核心组件与CrawlSpider类、分布式网络爬虫Scrapy-Redis。
本书可以作为高等院校计算机相关专业程序设计课程的教材、Python网络爬虫的相关培训教材,以及广大编程开发者的网络爬虫入门级教材。
第1章 认识网络爬虫 001 1.1 什么是网络爬虫 001 1.2 网络爬虫的应用场景 002 1.3 网络爬虫合法性探究 003 1.3.1 Robots协议 003 1.3.2 防爬虫应对策略 005 1.4 网络爬虫的工作原理和流程 006 1.4.1 网络爬虫的工作原理 006 1.4.2 网络爬虫抓取网页的流程 008 1.5 网络爬虫实现技术探究 009 1.5.1 网络爬虫的实现技术 009 1.5.2 Python实现网络爬虫的流程 010 1.6 本章小结 011 1.7 习题 011 第2章 网页请求原理 013 2.1 浏览器加载网页的过程 013 2.2 HTTP基础 014 2.2.1 URL简介 014 2.2.2 HTTP和HTTPS 015 2.2.3 HTPP请求格式 016 2.2.4 HTTP响应格式 017 2.3 网页基础 019 2.3.1 网页开发技术 019 2.3.2 网页的结构 021 2.3.3 网页的分类 022 2.3.4 网页数据的格式 024 2.4 HTTP抓包工具——Fiddler 026 2.4.1 Fiddler的工作原理 026 2.4.2 Fiddler的下载与安装 027 2.4.3 Fiddler界面详解 029 2.4.4 Fiddler捕获HTTPS页面的设置 032 2.4.5 Fiddler的基本使用 039 2.5 本章小结 041 2.6 习题 041 第3章 抓取静态网页数据 043 3.1 抓取静态网页的实现技术 043 3.2 发送基本请求 044 3.2.1 发送GET请求 044 3.2.2 发送POST请求 046 3.2.3 处理响应 047 3.3 处理复杂请求 049 3.3.1 定制请求头 049 3.3.2 验证Cookie 051 3.3.3 保持会话 052 3.3.4 SSL证书验证 053 3.4 设置代理服务器 054 3.4.1 代理服务器简介 054 3.4.2 设置代理服务器 055 3.4.3 检测代理IP的有效性 057 3.5 处理异常 058 3.6 实践项目:抓取黑马程序员论坛的数据 059 【项目目标】 059 【项目分析】 060 【项目实现】 061 3.7 本章小结 063 3.8 习题 063 第4章 解析网页数据 065 4.1 解析网页数据的实现技术 065 4.2 正则表达式与re模块 066 4.2.1 正则表达式的语法 066 4.2.2 re模块的使用 068 4.3 XPath与lxml库 069 4.3.1 XPath简介 069 4.3.2 XPath语法 070 4.3.3 XPath开发工具 073 4.3.4 lxml库简介 075 4.4 Beautiful Soup库 077 4.4.1 Beautiful Soup简介 077 4.4.2 创建BeautifulSoup类的对象 078 4.4.3 通过查找方法选取节点 080 4.4.4 通过CSS选择器选取节点 081 4.5 JSONPath与jsonpath模块 083 4.5.1 JSONPath语法 083 4.5.2 jsonpath模块的使用 085 4.6 实践项目:采集黑马程序员论坛的帖子 088 【项目目标】 088 【项目分析】 089 【项目实现】 090 4.7 本章小结 093 4.8 习题 093 第5章 抓取动态网页数据 095 5.1 抓取动态网页的实现技术 095 5.2 Selenium和WebDriver的安装与配置 096 5.3 Selenium的基本使用 099 5.3.1 WebDriver类的常用属性和方法 100 5.3.2 定位元素 102 5.3.3 鼠标操作 105 5.3.4 下拉列表框操作 107 5.3.5 弹出框处理 108 5.3.6 页面切换 110 5.3.7 页面等待 111 5.4 实践项目:采集集信达平台的短信服务日志信息 114 【项目目标】 114 【项目分析】 116 【项目实现】 119 5.5 本章小结 122 5.6 习题 123 第6章 提升网络爬虫速度 125 6.1 网络爬虫速度提升方案 125 6.2 多线程爬虫 126 6.2.1 多线程爬虫流程分析 126 6.2.2 多线程爬虫实现技术 127 6.2.3 多线程爬虫基本示例 130 6.2.4 多线程爬虫性能分析 133 6.3 协程爬虫 134 6.3.1 协程爬虫流程分析 134 6.3.2 协程爬虫实现技术 134 6.3.3 协程爬虫基本示例 137 6.3.4 协程爬虫性能分析 138 6.4 实践项目:使用多线程采集黑马头条的评论列表 139 【项目目标】 139 【项目分析】 140 【项目实现】 141 6.5 本章小结 144 6.6 习题 144 第7章 存储数据 146 7.1 数据存储的方式 146 7.2 存储至MongoDB数据库 147 7.2.1 下载与安装MongoDB 147 7.2.2 使用Python操作MongoDB 151 7.3 存储至Redis数据库 154 7.3.1 下载与安装Redis 154 7.3.2 使用Python操作Redis 157 7.3.3 Redis桌面管理工具 159 7.4 实践项目:采集小兔鲜儿网的商品信息 162 【项目目标】 162 【项目分析】 164 【项目实现】 167 7.5 本章小结 170 7.6 习题 170 第8章 验证码识别 172 8.1 字符验证码的识别 178 8.2 滑动拼图验证码的识别 186 8.3 点选验证码的识别 186 8.4 实践项目:登录黑马头条后台管理系统 193 【项目目标】 193 【项目分析】 194 【项目实现】 195 8.5 本章小结 201 8.6 习题 202 第9章 初识网络爬虫框架Scrapy 204 9.1 Scrapy框架简介 204 9.2 Scrapy框架架构 205 9.3 Scrapy框架运作流程 206 9.4 Scrapy框架安装 208 9.5 Scrapy框架基本操作 210 9.5.1 新建Scrapy项目 210 9.5.2 明确采集目标 211 9.5.3 制作爬虫 212 9.5.4 永久存储数据 217 9.6 实践项目:采集黑马程序员视频库的视频信息 218 【项目目标】 218 【项目分析】 218 【项目实现】 219 9.7 本章小结 221 9.8 习题 221 第10章 Scrapy核心组件与CrawlSpider类 223 10.1 Spiders组件 223 10.2 Item Pipeline组件 224 10.3 Downloader Middlewares组件 226 10.3.1 内置下载中间件 227 10.3.2 自定义下载中间件 227 10.3.3 激活下载中间件 229 10.4 Settings组件 229 10.5 CrawlSpider类 231 10.5.1 CrawlSpider类简介 231 10.5.2 CrawlSpider类的工作原理 233 10.5.3 通过Rule类决定抓取规则 234 10.5.4 通过LinkExtractor类提取 链接 235 10.6 实践项目:采集畅购商城的华为手表信息 236 【项目目标】 237 【项目分析】 237 【项目实现】 238 10.7 本章小结 240 10.8 习题 240 第11章 分布式网络爬虫Scrapy-Redis 242 11.1 分布式网络爬虫简介 242 11.2 Scrapy-Redis架构 244 11.3 Scrapy-Redis运作流程 246 11.4 Scrapy-Redis开发准备 246 11.4.1 安装Scrapy-Redis 246 11.4.2 修改配置文件 247 11.4.3 测试远程连接 248 11.5 Scrapy-Redis的基本操作 250 11.5.1 新建Scrapy-Redis项目 250 11.5.2 明确采集目标 251 11.5.3 制作爬虫 252 11.5.4 运行爬虫 253 11.5.5 使用管道存储数据 254 11.6 实践项目:使用RedisCrawlSpider采集畅购商城的华为手表信息 256 【项目目标】 256 【项目分析】 256 【项目实现】 256 11.7 本章小结 261 11.8 习题 261