1.1 简介
· 爬虫是请求网站并提取数据的自动化程序
· 爬虫可以简单分为几步:抓取页面、分析页面、存储数据。
1.2 请求库的安装
· 在第一步抓取页面的过程中,我们就需要模拟浏览器向服务器发出请求,涉及到的第三方库有 Requests、Selenium、Aiotttp 等。
· Selenium自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等等操作,对于一些 JavaScript 渲染的页面来说,此种抓取方式非常有效。
> 安装Requests、Selenium
> 安装ChromeDriver
#安装后测试
from selenium import webdriver browser = webdriver.Chrome()
· Requests 库是一个阻塞式 HTTP 请求库,发出请求后需要等待服务器响应,耗时。如果可以在等待过程中做一些其他事情,比如进行请求调度、相应处理等,可以提高效率。Aiohttp 就是这样一个提供异步 Web 服务的库,借助于 async/await关键字写法更加简洁,架构更清晰。
> 安装aiohttp
pip3 install aiohttp==3.0.0
1.3 解析库的安装
抓取代码后,下一步是从网页中提取信息。易用的解析库有 LXML、BeautifulSoup、PyQuery 等等,提供了非常强大的解析方法,如 XPath 解析、CSS 选择器解析等等。
> 安装上述三个包
> 安装tesseract库识别OCR
1.4 数据库的安装
关系型数据库如 SQLite、MySQL、Oracle、SQL Server、DB2 等,其数据库是以表的形式存储。
非关系型数据库如MongoDB、Redis,它们的存储形式是键值对,存储形式更加灵活。
1.4.1 MySQL
一个轻量级的关系型数据库,以表的形式来存储数据
brew install mysql brew services start mysql brew services stop mysql
1.4.2 MongoDB
由 C++ 语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似 Json 对象,它的字段值可以包含其他文档,数组及文档数组,非常灵活。
brew install mongodb brew services start mongodb sudo mongod brew services stop mongodb
>下载可视化工具robo3t
1.4.3 Redis安装
Redis 是一个基于内存的高效的非关系型数据库
brew install redis brew services start redis #启动服务 redis-server /usr/local/etc/redis.conf
Mac 下 Redis 的配置文件路径是 /usr/local/etc/redis.conf,可以通过修改它来配置访问密码。
1.5 存储库的安装
安装python对应的库
pip3 install pymysql, pymongo, redispy
RedisDump 是一个用于 Redis 数据导入导出的工具,是基于 Ruby 实现的,所以要安装 RedisDump 需要先安装Ruby。
1.6 Web库的安装
python中web服务程序:Flask、Django 等,来开发网站,开发接口
需要web服务程序来搭建一些API接口,供爬虫使用。
Flask 是一个轻量级的 Web 服务程序,简单、易用、灵活,在本书中我们主要用它来做一些 API 服务,
Tornado 是一个支持异步的Web框架,通过使用非阻塞 I/O 流,它可以支撑成千上万的开放连接。后续将用tornado+redis搭建一个ADSL拨号代理池。
1.7 APP爬取相关库的安装(需要的时候再装)
除了网页,爬虫也可以对app数据进行爬取。一般是通过请求服务器的接口来获取的,主要要利用抓包技术。包括:Charles、MitmProxy、MitmDump,APP
Charles 来作为主要的移动端抓包工具,用于分析移动 APP 的数据包,辅助完成 APP 数据抓取工作。
MitmProxy 是一个支持 HTTP 和 HTTPS 的抓包程序,类似 Fiddler、Charles 的功能,只不过它是一个控制台的形式操作。
同时 MitmProxy 还有两个关联组件,一个是 MitmDump,它是 MitmProxy 的命令行接口,利用它我们可以对接 Python 脚本,用 Python 实现监听后的处理。另一个是 MitmWeb,它是一个 Web 程序,通过它我们可以清楚地观察到 MitmProxy 捕获的请求。
Appium 是移动端的自动化测试工具,类似于前面所说的 Selenium,利用它我们可以驱动 Android、iOS 等设备完成自动化测试,比如模拟点击、滑动、输入等操作,
1.8 爬虫框架的安装
利用框架,不需再关心某些功能的具体实现,只需关心爬取逻辑。可以大大简化代码量,而且架构也会变得清晰,爬取效率也会高许多。
1.8.1 PySpider
PySpider 是国人 binux 编写的强大的网络爬虫框架,它带有强大的 WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,同时它支持多种数据库后端、多种消息队列,另外它还支持 JavaScript 渲染页面的爬取,
pip3 install
后直接在浏览器打开:http://localhost:5000/
1.8.2 Scrapy安装
1.8.3 ScrapySplash安装
ScrapySplash 是一个 Scrapy 中支持 JavaScript 渲染的工具
ScrapySplash 的安装分为两部分,一个是是 Splash 服务的安装,安装方式是通过 Docker,安装之后会启动一个 Splash 服务,我们可以通过它的接口来实现 JavaScript 页面的加载。另外一个是 ScrapySplash 的 Python 库的安装,安装之后即可在 Scrapy 中使用 Splash 服务。
安装时需运行docker,完成后
http://localhost:8050 即可看到splash主页
1.8.4 ScrapyRedis的安装
1.9 部署库的安装
大规模抓取数据,分布式爬虫。一份代码部署到多台主机上协同运行
对于 Scrapy 来说,它有一个扩展组件叫做 Scrapyd,我们只需要安装 Scrapyd 即可远程管理 Scrapy 任务,包括部署源码、启动任务、监听任务等操作。另外还有 ScrapydClient 和 ScrapydAPI 来帮助我们更方便地完成部署和监听操作。
另外还有一种部署方式就是 Docker 集群部署,我们只需要将爬虫制作为 Docker 镜像,只要主机安装了 Docker,就可以直接运行爬虫,而无需再去担心环境配置、版本问题。
1.9.1 Docker安装
Docker 是一种容器技术,它可以将应用和环境等进行打包,形成一个独立的,类似于 iOS 的 APP 形式的「应用」,这个应用可以直接被分发到任意一个支持 Docker 的环境中,通过简单的命令即可启动运行。Docker 是一种最流行的容器化实现方案。和虚拟化技术类似,它极大的方便了应用服务的部署;又与虚拟化技术不同,它以一种更轻量的方式实现了应用服务的打包。使用 Docker 可以让每个应用彼此相互隔离,在同一台机器上同时运行多个应用,不过他们彼此之间共享同一个操作系统。Docker 的优势在于,它可以在更细的粒度上进行资源的管理,也比虚拟化技术更加节约资源。
docker镜像加速器:阿里云或DaoCloud
1.9.2 Scrapyd的安装
Scrapyd 是一个用于部署和运行 Scrapy 项目的工具。有了它,你可以将写好的 Scrapy 项目上传到云主机并通过 API 来控制它的运行。但主要针对Linux主机
1.9.3 ScrapydClient的安装
...
##本系列内容为《python3爬虫开发实战》学习笔记。本系列博客列表如下:
持续更新...
对应代码请见:..