用 Python 作过爬虫的小伙伴可能接触过 Scrapy,GitHub:https://github.com/scrapy/scrapy。Scrapy 的确是一个很是强大的爬虫框架,爬取效率高,扩展性好,基本上是使用 Python 开发爬虫的必备利器。若是使用 Scrapy 作爬虫,那么在爬取时,咱们固然彻底可使用本身的主机来完成爬取,但当爬取量很是大的时候,咱们确定不能在本身的机器上来运行爬虫了,一个好的方法就是将 Scrapy 部署到远程服务器上来执行。html
因此,这时候就出现了另外一个库 Scrapyd,GitHub:https://github.com/scrapy/scrapyd,有了它咱们只须要在远程服务器上安装一个 Scrapyd,启动这个服务,就能够将咱们写的 Scrapy 项目部署到远程主机上了,Scrapyd 还提供了各类操做 API,能够自由地控制 Scrapy 项目的运行,API 文档:http://scrapyd.readthedocs.io/en/stable/api.html,例如咱们将 Scrapyd 安装在 IP 为 88.88.88.88 的服务器上,而后将 Scrapy 项目部署上去,这时候咱们经过请求 API 就能够来控制 Scrapy 项目的运行了,命令以下:python
curl http://88.88.88.88:6800/schedule.json -d project=myproject -d spider=somespidergit
这样就至关于启动了 myproject 项目的 somespider 爬虫,而不用咱们再用命令行方式去启动爬虫,同时 Scrapyd 还提供了查看爬虫状态、取消爬虫任务、添加爬虫版本、删除爬虫版本等等的一系列 API,因此说,有了 Scrapyd,咱们能够经过 API 来控制爬虫的运行,摆脱了命令行的依赖。github
另外爬虫部署仍是个麻烦事,由于咱们须要将爬虫代码上传到远程服务器上,这个过程涉及到打包和上传两个过程,在 Scrapyd 中其实提供了这个部署的 API,叫作 addversion,可是它接受的内容是 egg 包文件,因此说要用这个接口,咱们必需要把咱们的 Scrapy 项目打包成 egg 文件,而后再利用文件上传的方式请求这个 addversion 接口才能够完成上传,这个过程又比较繁琐了,因此又出现了一个工具叫作 Scrapyd-Client,GitHub:https://github.com/scrapy/scrapyd-client,利用它的 scrapyd-deploy 命令咱们即可以完成打包和上传的两个功能,可谓是又方便了一步。正则表达式
这样咱们就已经解决了部署的问题,回过头来,若是咱们要想实时查看服务器上 Scrapy 的运行状态,那该怎么办呢?像刚才说的,固然是请求 Scrapyd 的 API 了,若是咱们想用 Python 程序来控制一下呢?咱们还要用 requests 库一次次地请求这些 API ?这就太麻烦了吧,因此为了解决这个需求,Scrapyd-API 又出现了,GitHub:https://github.com/djm/python-scrapyd-api,有了它咱们能够只用简单的 Python 代码就能够实现 Scrapy 项目的监控和运行:数据库
from scrapyd_api import ScrapydAPIjson
scrapyd = ScrapydAPI('http://88.888.88.88:6800')api
scrapyd.list_jobs('project_name')浏览器
这样它的返回结果就是各个 Scrapy 项目的运行状况。服务器
例如:
{
'pending': [
],
'running': [
{
'id': u'14a65...b27ce',
'spider': u'spider_name',
'start_time': u'2018-01-17 22:45:31.975358'
},
],
'finished': [
{
'id': '34c23...b21ba',
'spider': 'spider_name',
'start_time': '2018-01-11 22:45:31.975358',
'end_time': '2018-01-17 14:01:18.209680'
}
]
}
这样咱们就能够看到 Scrapy 爬虫的运行状态了。
因此,有了它们,咱们能够完成的是:
经过 Scrapyd 完成 Scrapy 项目的部署
经过 Scrapyd 提供的 API 来控制 Scrapy 项目的启动及状态监控
经过 Scrapyd-Client 来简化 Scrapy 项目的部署
经过 Scrapyd-API 来经过 Python 控制 Scrapy 项目
是否是方便多了?
但是?真的达到最方便了吗?确定没有!若是这一切的一切,从 Scrapy 的部署、启动到监控、日志查看,咱们只须要鼠标键盘点几下就能够完成,那岂不是美滋滋?更或者说,连 Scrapy 代码均可以帮你自动生成,那岂不是爽爆了?
有需求就有动力,没错,Gerapy 就是为此而生的,GitHub:https://github.com/Gerapy/Gerapy。
本节咱们就来简单了解一下 Gerapy 分布式爬虫管理框架的使用方法。
Gerapy 是一款分布式爬虫管理框架,支持 Python 3,基于 Scrapy、Scrapyd、Scrapyd-Client、Scrapy-Redis、Scrapyd-API、Scrapy-Splash、Jinjia二、Django、Vue.js 开发,Gerapy 能够帮助咱们:
更方便地控制爬虫运行
更直观地查看爬虫状态
更实时地查看爬取结果
更简单地实现项目部署
更统一地实现主机管理
更轻松地编写爬虫代码
安装很是简单,只须要运行 pip3 命令便可:
pip3 install gerapy
安装完成以后咱们就可使用 gerapy 命令了,输入 gerapy 即可以获取它的基本使用方法:
gerapy
Usage:
gerapy init [--folder=<folder>]
gerapy migrate
gerapy createsuperuser
gerapy runserver [<host:port>]
gerapy makemigrations
若是出现上述结果,就证实 Gerapy 安装成功了。
接下来咱们来开始使用 Gerapy,首先利用以下命令进行一下初始化,在任意路径下都可执行以下命令:
gerapy init
执行完毕以后,本地便会生成一个名字为 gerapy 的文件夹,接着进入该文件夹,能够看到有一个 projects 文件夹,咱们后面会用到。
紧接着执行数据库初始化命令:
cd gerapy
gerapy migrate
这样它就会在 gerapy 目录下生成一个 SQLite 数据库,同时创建数据库表。
接着咱们只须要再运行命令启动服务就行了:
gerapy runserver
这样咱们就能够看到 Gerapy 已经在 8000 端口上运行了。
所有的操做流程截图以下:
接下来咱们在浏览器中打开 http://localhost:8000/,就能够看到 Gerapy 的主界面了:
这里显示了主机、项目的状态,固然因为咱们没有添加主机,因此全部的数目都是 0。
若是咱们能够正常访问这个页面,那就证实 Gerapy 初始化都成功了。
接下来咱们能够点击左侧 Clients 选项卡,即主机管理页面,添加咱们的 Scrapyd 远程服务,点击右上角的建立按钮便可添加咱们须要管理的 Scrapyd 服务:
须要添加 IP、端口,以及名称,点击建立便可完成添加,点击返回便可看到当前添加的 Scrapyd 服务列表,样例以下所示:
这样咱们能够在状态一栏看到各个 Scrapyd 服务是否可用,同时能够一目了然当前全部 Scrapyd 服务列表,另外咱们还能够自由地进行编辑和删除。
Gerapy 的核心功能固然是项目管理,在这里咱们能够自由地配置、编辑、部署咱们的 Scrapy 项目,点击左侧的 Projects ,即项目管理选项,咱们能够看到以下空白的页面:
假设如今咱们有一个 Scrapy 项目,若是咱们想要进行管理和部署,还记得初始化过程当中提到的 projects 文件夹吗?这时咱们只须要将项目拖动到刚才 gerapy 运行目录的 projects 文件夹下,例如我这里写好了一个 Scrapy 项目,名字叫作 zhihusite,这时把它拖动到 projects 文件夹下:
这时刷新页面,咱们即可以看到 Gerapy 检测到了这个项目,同时它是不可配置、没有打包的:
这时咱们能够点击部署按钮进行打包和部署,在右下角咱们能够输入打包时的描述信息,相似于 Git 的 commit 信息,而后点击打包按钮,便可发现 Gerapy 会提示打包成功,同时在左侧显示打包的结果和打包名称:
打包成功以后,咱们即可以进行部署了,咱们能够选择须要部署的主机,点击后方的部署按钮进行部署,同时也能够批量选择主机进行部署,示例以下:
能够发现此方法相比 Scrapyd-Client 的命令行式部署,简直不能方便更多。
部署完毕以后就能够回到主机管理页面进行任务调度了,任选一台主机,点击调度按钮便可进入任务管理页面,此页面能够查看当前 Scrapyd 服务的全部项目、全部爬虫及运行状态:
咱们能够经过点击新任务、中止等按钮来实现任务的启动和中止等操做,同时也能够经过展开任务条目查看日志详情:
另外咱们还能够随时点击中止按钮来取消 Scrapy 任务的运行。
这样咱们就能够在此页面方便地管理每一个 Scrapyd 服务上的 每一个 Scrapy 项目的运行了。
同时 Gerapy 还支持项目编辑功能,有了它咱们再也不须要 IDE 便可完成项目的编写,咱们点击项目的编辑按钮便可进入到编辑页面,如图所示:
这样即便 Gerapy 部署在远程的服务器上,咱们不方便用 IDE 打开,也不喜欢用 Vim 等编辑软件,咱们能够借助于本功能方便地完成代码的编写。
上述的项目主要针对的是咱们已经写好的 Scrapy 项目,咱们能够借助于 Gerapy 方便地完成编辑、部署、控制、监测等功能,并且这些项目的一些逻辑、配置都是已经写死在代码里面的,若是要修改的话,须要直接修改代码,即这些项目都是不可配置的。
在 Scrapy 中,其实提供了一个可配置化的爬虫 CrawlSpider,它能够利用一些规则来完成爬取规则和解析规则的配置,这样可配置化程度就很是高,这样咱们只须要维护爬取规则、提取逻辑就能够了。若是要新增一个爬虫,咱们只须要写好对应的规则便可,这类爬虫就叫作可配置化爬虫。
Gerapy 能够作到:咱们写好爬虫规则,它帮咱们自动生成 Scrapy 项目代码。
咱们能够点击项目页面的右上角的建立按钮,增长一个可配置化爬虫,接着咱们即可以在此处添加提取实体、爬取规则、抽取规则了,例如这里的解析器,咱们能够配置解析成为哪一个实体,每一个字段使用怎样的解析方式,如 XPath 或 CSS 解析器、直接获取属性、直接添加值等多重方式,另外还能够指定处理器进行数据清洗,或直接指定正则表达式进行解析等等,经过这些流程咱们能够作到任何字段的解析。
再好比爬取规则,咱们能够指定从哪一个连接开始爬取,容许爬取的域名是什么,该连接提取哪些跟进的连接,用什么解析方法来处理等等配置。经过这些配置,咱们能够完成爬取规则的设置。
最后点击生成按钮便可完成代码的生成。
生成的代码示例结果如图所示,可见其结构和 Scrapy 代码是彻底一致的。
生成代码以后,咱们只须要像上述流程同样,把项目进行部署、启动就行了,不须要咱们写任何一行代码,便可完成爬虫的编写、部署、控制、监测。
以上即是 Gerapy 分布式爬虫管理框架的基本用法,如需了解更多,能够访问其 GitHub:https://github.com/Gerapy/Gerapy。
若是以为此框架有不足的地方,欢迎提 Issue,也欢迎发 Pull Request 来贡献代码,若是以为 Gerapy 有所帮助,还望赐予一个 Star!很是感谢!
如想了解更多爬虫资讯,欢迎阅读原文访问静觅博客。