Python3爬虫实战 数据清洗、数据分析与可视化 作者:姚良 出版时间:2019年版内容简介 作为一个自学爬虫的过来人,曾经走过很多弯路,在自学的道路上也迷茫过。每次面对一个全新的网站,都像是踏进一个未知的世界。你不知道前面有哪些反爬手段在等着你;你不知道你会踩进哪个坑里。我做爬虫的几年时间里,爬过很多的网站、遇到过很多的难题。这本书就是我这几年经验的总结,从开始的工具的学习使用,到实战项目的爬取,难度一步一步的升级,需求也越来越复杂,有各式各样的爬取方式。 /n本书主要内容与数据爬取相关,包括编写爬虫所需要的基础编程知识,如Requests包、Scrapy框架和数据库的使用,到项目实战教程,适合Python基础入门的读者。如果你是其他行业的从业者,想进入IT行业成为一位爬虫工程师,又或者你已经是IT行业的从业者,本书在能够让你在对爬虫工程师的工作内容有所了解的同时,也能让你掌握作为一个爬虫工程师所需要具备的基础技能。目录第一篇 基础知识 /n第1章 Python环境搭建 /n1.1 Python的安装 2 /n1.1.1 Windows下Python的安装 2 /n1.1.2 Mac OS X下Python的安装 3 /n1.1.3 Linux下Python的安装 3 /n1.1.4 安装pip工具 4 /n1.2 虚拟环境Virtualenv 5 /n1.2.1 Virtualenv的安装 5 /n1.2.2 创建虚拟环境 5 /n1.2.3 激活虚拟环境 5 /n1.2.4 创建指定Python版本的虚拟环境 5 /n1.3 选择合适的编辑器 6 /n1.3.1 Vim 6 /n1.3.2 Atom 6 /n1.3.3 Sublime Text 6 /n1.3.4 Notepad++ 6 /n1.3.5 Pycharm 6 /n第2章 常用爬虫库Requests /n2.1 安装Requests 7 /n2.1.1 用pip安装 7 /n2.1.2 用github源码安装 7 /n2.1.3 用curl安装 7 /n2.2 了解 Requests的功能 8 /n2.2.1 使用GET和POST发送请求 8 /n2.2.2 通过URL传递参数 9 /n2.2.3 设置超时 9 /n2.2.4 查看返回内容 9 /n2.2.5 设置请求头 10 /n2.2.6 更多复杂的Post请求 10 /n2.2.7 返回对象状态码 12 /n2.2.8 设置代理IP 13 /n2.3 BeautifulSoup的安装和使用 14 /n2.3.1 使用pip安装BeautifulSoup 14 /n2.3.2 使用BeautifulSoup定位元素 14 /n2.4 初识自动化测试工具Selenium 15 /n2.4.1 Selenium安装 15 /n2.4.2 使用Selnium爬取网站 15 /n2.5 Selenium定位元素 16 /n2.5.1 通过属性定位 17 /n2.5.2 通过xpath定位 17 /n2.6 Selenium反爬设置 18 /n2.6.1 设置请求头 18 /n2.6.2 设置代理IP 19 /n第3章 常用爬虫框架Scrapy /n3.1 认识Scrapy 21 /n3.1.1 Scrapy爬取quotes简单示例 21 /n3.1.2 安装所需依赖包 23 /n3.1.3 使用虚拟环境 23 /n3.2 Scrapy shell的使用 24 /n3.2.1 运行shell 24 /n3.2.2 使用Scrapy shell爬取Scrapy.org 24 /n3.2.3 爬虫调用shell 26 /n3.3 使用Scrapy爬取quotes 26 /n3.3.1 创建Scrapy项目并新建爬虫 27 /n3.3.2 爬取和提取数据 27 /n3.3.3 通过脚本运行Scrapy爬虫 29 /n3.3.4 在同一进程下运行多个爬虫 29 /n3.3.5 简易的分布式爬虫思路 30 /n3.3.6 防止爬虫被ban 31 /n3.4 setting基本配置 31 /n3.5 Pipeline模块 32 /n3.5.1 爬取文字板块 32 /n3.5.2 编写Pipeline模块 35 /n3.5.3 通过Pipeline将数据写入MongoDB数据库 36 /n3.5.4 ImagesPipeline处理图片 37 /n3.5.5 FilePipeline下载文件 40 /n3.6 Middleware中间件 41 /n3.6.1 Downloader Middleware 41 /n3.6.2 随机请求头中间件 42 /n3.6.3 更换代理IP中间件 45 /n3.6.4 通过Downloader Middleware使用Selenium 46 /n3.6.5 Spider Middleware 47 /n3.7 新功能拓展 48 /n3.7.1 信号signals 48 /n3.7.2 自定义拓展 51 /n第4章 数据存储——数据库的选择 /n4.1 MySQL数据库 53 /n4.1.1 MySQL的安装 53 /n4.1.2 几款可视化工具 54 /n4.1.3 数据库连接 55 /n4.1.4 数据库插入操作 55 /n4.1.5 数据库查询 56 /n4.1.6 数据库更新操作 56 /n4.1.7 爬取写入数据库 57 /n4.2 MongoDB数据库 58 /n4.2.1 MongoDB安装 58 /n4.2.2 连接数据库 59 /n4.2.3 查询数据库 59 /n4.2.4 插入和更新数据库 59 /n4.2.5 爬取数据并插入到MongoDB数据库中 60 /n4.3 Redis数据库 60 /n4.3.1 Redis安装 60 /n4.3.2 连接Redis数据库 61 /n4.3.3 Python操作Redis数据库 61 /n4.3.4 爬取并写入Redis做缓存 62 /n/n/n第5章 效率为王——分布式爬虫 /n5.1 什么是分布式爬虫 64 /n5.1.1 分布式爬虫的效率 64 /n5.1.2 实现分布式的方法 64 /n5.2 Celery 65 /n5.2.1 Celery入门 65 /n5.2.2 Celery分布式爬虫 66 /n5.3 使用Scrapy-redis的分布式爬虫 67 /n5.3.1 Scrapy-redis安装与入门 67 /n5.3.2 创建Scrapy-redis爬虫项目 68 /n第6章 抓包的使用与分析 /n6.1 利用抓包分析目标网站 72 /n6.1.1 如何抓包 72 /n6.1.2 网页抓包分析 72 /n6.2 手机APP抓包 74 /n6.2.1 使用fiddler抓包 75 /n6.2.2 HTTPS证书安装 75 /n6.2.3 booking手机端抓包 76 /n第7章 Websocket通信网站爬取 /n7.1 什么是Websocket 79 /n7.1.1 Websocket-clinet 79 /n7.1.2 Websocket-clinet简单入门 79 /n7.2 使用Websocket爬取财经网站 81 /n第8章 验证码破解 /n8.1 关于验证码 84 /n8.1.1 一般的验证码 84 /n8.1.2 极验验证 84 /n8.2 极验滑动验证破解 85 /n8.2.1 准备工具 85 /n8.2.2 分析滑动验证码 85 /n8.2.3 开始破解极限滑动验证码 87 /n8.3 图片验证码破解 89 /n8.3.1 准备工具 89 /n8.3.2 文字图像识别 89 /n8.3.3 识别验证码 90 /n第9章 多线程与多进程并发爬取 /n9.1 多线程 92 /n9.1.1 堵塞与非堵塞 92 /n9.1.2 继承threading.Thread创建类 96 /n9.1.3 多线程的锁 98 /n9.1.4 queue队列 100 /n9.1.5 线程池 101 /n9.2 多线程爬虫 103 /n9.2.1 爬虫框架 103 /n9.2.2 编写爬虫 104 /n9.2.3 以多线程方式启动 105 /n9.3 多进程 107 /n9.3.1 multiprocessing模块 107 /n9.3.2 通过Pool进程池创建进程 108 /n9.3.3 multiprocessing.Queue队列 109 /n9.3.4 multiprocessing.Pipe管道 112 /n9.3.5 multiprocessing.Lock锁 113 /n9.4 多进程爬虫 114 /n9.4.1 多进程爬取音频 114 /n9.4.2 多进程加多线程进行爬取 116 /n第10章 爬虫接口优化 /n10.1 Gunicorn的安装与使用 119 /n10.2 Gunicorn配置 121 /n10.2.1 配置参数 121 /n10.2.2 通过config文件启动 123 /n第11章 使用Docker部署爬虫 /n11.1 Docker 125 /n11.1.1 Docker的安装 125 /n11.1.2 Docker的镜像 125 /n11.1.3 构建自己的Docker镜像 127 /n11.1.4 容器使用 127 /n11.1.5 Dockerfile 129 /n11.2 爬虫部署 130 /n11.2.1 爬虫接口 130 /n11.2.2 部署爬虫接口 131 /n第二篇 实战案例 /n第12章 实战1:建立代理IP池 /n12.1 爬取免费代理IP 136 /n12.1.1 爬取代理IP 136 /n12.1.2 检验代理IP 138 /n12.2 建立代理IP池 138 /n12.2.1 检验代理IP 138 /n12.2.2 Redis消息队列 140 /n12.2.3 master爬虫 142 /n第13章 实战2:磁力链接搜索器 /n13.1 爬取磁力搜索平台 145 /n13.1.1 磁力平台 145 /n13.1.2 slave爬虫 146 /n13.2 实现磁力搜索器 148 /n13.2.1 展示与交互 148 /n13.2.2 数据查询 150 /n第14章 实战3:爬虫管家 /n14.1 QQ机器人 152 /n14.1.1 qqbot 152 /n14.1.2 基本操作 152 /n14.1.3 实现自己的机器人 153 /n14.2 爬虫监控机器人 153 /n第15章 实战4:数据可视化 /n15.1 可视化包Pyecharts 156 /n15.1.1 Pyecharts的安装 156 /n15.1.2 地图展示数据 157 /n15.2 爬取最低价机票数据 158 /n15.2.1 破解旅游网站价格日历接口 159 /n15.2.2 爬取旅游网站 160 /n15.2.3 将数据可视化 161 /n第16章 实战5:爬取贴吧中的邮箱 /n16.1 爬取网站 164 /n16.1.1 爬取高校名单 164 /n16.1.2 利用正则表达式匹配号码 165 /n16.2 分析贴吧搜索页面并提取号码 165 /n16.3 使用Scrapy开始编码 167 /n16.3.1 创建贴吧Scrapy项目 167 /n16.3.2 新建爬虫并编写爬虫逻辑 168 /n16.3.3 数据处理 170 /n第17章 实战6:批量爬取企业信息 /n17.1 从第三方平台获取企业名 172 /n17.2 如何爬取企业详细信息 174 /n第18章 实战7:爬取公众号历史文章 /n18.1 分析公众号接口 177 /n18.1.1 开始抓包 177 /n18.1.2 分析接口 179 /n18.1.3 尝试请求数据 179 /n18.2 爬取公众号 180 /n18.2.1 爬取思路 180 /n18.2.2 请求接口获取文章URL 180 /n18.2.3 解析文章网页源码 181 /n18.2.4 合并代码 183 /n第19章 实战8:高效爬取——异步爬虫 /n19.1 异步编程 186 /n19.1.1 asyncio库 186 /n19.1.2 aiohttp库 187 /n19.1.3 访问多个URL 188 /n19.2 爬取图片 189 /n19.2.1 为函数命名 189 /n19.2.2 对网页进行解析 190 /n19.2.3 异步爬取图片 190 /n第20章 实战9:爬取漫画网站 /n20.1 爬取单部漫画 193 /n20.1.1 单集漫画的爬取 193 /n20.1.2 全集漫画的爬取 195 /n20.2 爬取漫画全站 196 /n第21章 实战10:给kindle推送爬取的小说 /n21.1 用Python发送邮件 199 /n21.1.1 纯文本邮件的发送 199 /n21.1.2 带附件邮件的发送 200 /n21.2 爬取小说 201 /n21.2.1 制作word文档 201 /n21.2.2 爬取baka-tsuki.org 202 /n第22章 实战11:爬取游民星空壁纸 /n22.1 星空壁纸的爬取准备 205 /n22.2 爬取壁纸 206 /n22.2.1 获取图片和下一页地址 206 /n22.2.2 爬取列表页 208 /n22.2.3 爬取高清图片资源 209 /n第23章 综合实战:建立一个小网站 /n23.1 Flask框架 210 /n23.1.1 写一个简单的hello word网页 210 /n23.1.2 添加html模板 210 /n23.2 Bootstrap框架 212 /n23.2.1 使用Bootstrap框架 213 /n23.2.2 Bootstrap在线模板 213 /n23.2.3 添加壁纸板块 215 /n第24章 综合实战:爬取电影网站 /n24.1 理清爬虫的思路 218 /n24.2 分步编码实现爬取 219 /n24.2.1 爬取详情页 219 /n24.2.2 爬取列表页 220 /n24.2.3 爬取首页 221 /n24.2.4 写入数据库 222 /n第25章 综合实战:建立电影小站 /n25.1 搭建项目 224 /n25.1.1 sqlite数据库 224 /n25.1.2 创建项目 225 /n25.1.3 通过蓝图建立电影板块 226 /n25.2 建立模板 229 /n25.2.1 flask-bootstrap 229 /n25.2.2 电影页面 231 /n25.2.3 电影分类 233 /n25.2.4 电影详情页 237 /n25.2.5 电影搜索页 239 /n第26章 综合实战:磁力搜索 /n26.1 磁力搜索 241 /n26.1.1 如何高效爬取 241 /n26.1.2 建立Celery任务 244 /n26.2 Web部分 248 /n26.2.1 建立模型 248 /n26.2.2 视图函数 248 /n26.2.3 关于产品 251 上一篇: MySQL DBA工作笔记:数据库管理、架构优化与运维开发 杨建荣 2019年版 下一篇: 清华开发者书库 python算法指南:程序员经典算法分析与实现 李永华 2019年版