《Learning Scrapy》(中文版)第6章 Scrapinghub部署

前面几章中,我们学习了如何编写爬虫。编写好爬虫之后,我们有两个选择。如果是做单次抓取,让爬虫在开发机上运行一段时间就行了。或者,我们往往需要周期性的进行抓取。我们可以用Amazon、RackSpace等服务商的云主机,但这需要一些设置、配置和维护。这时候就需要Scrapinghub了。

Scrapinghub是Scrapy高级开发者托管在Amazon上面的云架构。这是一个付费服务,但提供免费使用。如果想短时间内让爬虫运行在专业、有维护的平台上,本章内容很适合你。

注册、登录、创建项目

第一步是在http://scrapinghub.com/注册一个账户,只需电子邮件地址和密码。点击确认邮件的链接之后,就登录了。首先看到的是工作台,目前还没有任何项目,点击+Service按钮(1)创建一个:

将项目命名为properties(2),点击Create按钮(3)。然后点击链接new(4)打开这个项目。

项目的工作台是最重要的界面。左侧栏中可以看到一些标签。Jobs和Spiders提供运行和爬虫的信息。Periodic Jobs可以制定周期抓取。其它四项,现在对我们不重要。

进入Settings(1)。和许多网站的设置不同,Scrapinghub提供许多非常有用的设置项。

现在,先关注下Scrapy Deploy(2)。

部署爬虫并制定计划

我们从开发机直接部署。将Scrapy Deploy页上的url复制到我们项目的scrapy.cfg中,替换原有的[depoly]部分。不必设置密码。我们用第4章中的properties爬虫作例子。我们使用这个爬虫的原因是,目标数据可以从网页访问,访问的方式和第4章中一样。开始之前,我们先恢复原有的settings.py,去除和Appery.io pipeline有关的内容:

提示:代码位于目录ch06。这个例子在ch06/properties中。

$ pwd
/root/book/ch06/properties
$ ls
properties  scrapy.cfg
$ cat scrapy.cfg
...
[settings]
default = properties.settings
# Project: properties
[deploy]
url = http://dash.scrapinghub.com/api/scrapyd/
username = 180128bc7a0.....50e8290dbf3b0
password = 
project = 28814

为了部署爬虫,我们使用Scrapinghub提供的shub工具,可以用pip install shub安装。我们的开发机中已经有了。我们shub login登录Scrapinghub,如下所示:

$ shub login
Insert your Scrapinghub API key : 180128bc7a0.....50e8290dbf3b0
Success.

我们已经在scrapy.cfg文件中复制了API key,我们还可以点击Scrapinghub右上角的用户名找到API key。弄好API key之后,就可以使用shub deploy部署爬虫了:

$ shub deploy
Packing version 1449092838
Deploying to project "28814"in {"status": "ok", "project": 28814,
"version":"1449092838", "spiders": 1}
Run your spiders at: https://dash.scrapinghub.com/p/28814/

Scrapy打包了所有爬虫文件,并上传到了Scrapinghub。我们可以看到两个新目录和一个文件,可以选择删除或不删除。

$ ls
build project.egg-info properties scrapy.cfgsetup.py
$ rm -rf build project.egg-info setup.py

现在,如果我们在Scrapinghub点击Spiders栏(1),我们可以看到上传的tomobile爬虫:

如果我们点击它(2),可以转到爬虫的工作台。里面的信息很多,但我们要做的是点击右上角的Schedule按钮(3),在弹出的界面中再点击Schedule(4)。

几秒钟之后,Running Jobs栏会出现新的一行,再过一会儿,Requests和Items的数量开始增加。

提示:你或许不会限制抓取速度。Scrapinghub使用算法估算在不被封的情况下,你每秒的最大请求数。

运行一段时间后,勾选这个任务(6),点击Stop(7)。

几秒之后,可以在Completed Jobs看到抓取结束。要查看抓取文件,可以点击文件数(8)。

访问文件 来到任务的工作台。这里,可以查看文件(9),确认它们是否合格。我们还可以用上面的条件过滤结果。当我们向下翻动时,更多的文件被加载进来。

如果有错的话,我们可以在Items的上方找到有用的关于Requests和Log的信息(10)。用上方的面包屑路径(11)可以返回爬虫或项目主页。当然,可以点击左上的Items按钮(12)下载文件,选择合适的选项(13),保存格式可以是CSV、JSON和JSON Lines。

另一种访问文件的方法是通过Scrapinghub的Items API。我们要做的是查看任务页或文件页的URL。应该看起来和下面很像: https://dash.scrapinghub.com/p/28814/job/1/1/

在这个URL中,28814是项目编号(scrapy.cfg中也设置了它),第一个1是爬虫“tomobile”的ID编号,第二个1是任务编号。按顺序使用这三个数字,我们可以在控制台中用curl取回文件,请求发送到https://storage.scrapinghub.com/items/<project id>/<spider id>/<job id>,并使用用户名/API key验证,如下所示:

$ curl -u 180128bc7a0.....50e8290dbf3b0: https://storage.scrapinghub.com/items/28814/1/1
{"_type":"PropertiesItem","description":["same\r\nsmoking\r\nr...
{"_type":"PropertiesItem","description":["british bit keep eve...
...

如果询问密码的话,可以不填。用程序取回文件的话,可以使用Scrapinghub当做数据存储后端。存储的时间取决于订阅套餐的时间(免费试用是七天)。

制定周期抓取

只需要点击Periodic Jobs栏(1),点击Add(2),设定爬虫(3),调整抓取频率(4),最后点击Save(5)。

总结 本章中,我们首次接触了将Scrapy项目部署到Scrapinghub。定时抓取数千条信息,并可以用API方便浏览和提取。后面的章节中,我们继续学习设置一个类似Scrapinghub的小型服务器。下一章先学习配置和管理。


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小詹同学

老司机带你用python来爬取妹子图

这是小詹关于爬虫的第③篇文章! 这篇文章来自一个大一学弟的公众号「日常学python」 虽然这篇文章难度不大,但是对新手来说绝对是福利,爬天爬地爬空气你懂得~ ...

50080
来自专栏Crossin的编程教室

【Python 第74课】多线程

很多人使用 python 编写“爬虫”程序,抓取网上的数据。 举个例子,通过豆瓣的 API 抓取 30 部影片的信息: import urllib, time...

30250
来自专栏小詹同学

Python爬虫系列——入门到精通

这是小詹的第④篇免费分享,每一篇都是精挑细选! 老规矩,免费免转发,直接无条件分享给大家(方便的话点一下文章末尾广告就是对小詹的支持啦~)资源分享类的干货一般不...

40890
来自专栏python学习路

二、Item Pipeline和Spider-----基于scrapy取校花网的信息 编写item pipeline

Item Pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理I...

39190
来自专栏Crossin的编程教室

【Python 第46课】 查天气(4)

明天俺就要出发了,今天赶在睡觉前来个深夜档。 这一课算是“查天气”程序的附加内容。没有这一课,你也查到天气了。但了解一下城市代码的抓取过程,会对网页抓取有更深的...

33980
来自专栏Crossin的编程教室

用 Python 实现你的量化交易策略

Python 的学习者中,有相当一部分是冲着爬虫去的。因为爬虫可以帮你解决很多工作和生活中的问题,节约你的生命。不过 Python 还有一个神秘而有趣的应用领域...

1.9K80
来自专栏Crossin的编程教室

【Pygame 第3课】 游戏中的事件

有人问,为什么突然讲游戏了?有人问,为什么不继续讲python的基础?有人问,为什么不讲爬虫?有人问,为什么不讲算法?…… 因为有很多内容,每一块都有想听的人。...

33070
来自专栏Python小屋

Python批量爬取微信公众号文章中的图片

总体说明:微信公众号的文章也是个普通的网页。 下面的代码以微信公众号“Python小屋”的文章1900页Python系列PPT分享三:选择与循环结构语法及案例(...

52080
来自专栏小詹同学

Python爬虫系列之一——我有100万?

高中生都开始写爬虫了,可见爬虫有多热门,一个某某985高校的研究生不学习学习爬虫实在是有些落伍啦~ ? 一、网络爬虫和url ...

39760
来自专栏python学习路

一、爬虫的基本体系和urllib的基本使用 先进行一个简单的实例:利用有道翻译(post请求)另外一个简单的小实例是:豆瓣网剧情片排名前20的电影(Ajax请求)

爬虫   网络是一爬虫种自动获取网页内容的程序,是搜索引擎的重要组成部分。网络爬虫为搜索引擎从万维网下载网页。一般分为传统爬虫和聚焦爬虫。 爬虫的分类   传统...

30940

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励