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

简介: 序言第1章 Scrapy介绍第2章 理解HTML和XPath第3章 爬虫基础 第4章 从Scrapy到移动应用第5章 快速构建爬虫第6章 Scrapinghub部署第7章 配置和管理第8章 Scrapy编程第9章 使用Pipeline第10章 理解Scrapy的性能第11章(完) Scrapyd分布式抓取和实时分析前面几章中,我们学习了如何编写爬虫。

序言
第1章 Scrapy介绍
第2章 理解HTML和XPath
第3章 爬虫基础
第4章 从Scrapy到移动应用
第5章 快速构建爬虫
第6章 Scrapinghub部署
第7章 配置和管理
第8章 Scrapy编程
第9章 使用Pipeline
第10章 理解Scrapy的性能
第11章(完) Scrapyd分布式抓取和实时分析


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

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

注册、登录、创建项目

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

img_999a85912cff624d5d516ff95c284576.png

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

img_eea2a7f8ff35e6afd3b05777e31d2023.png

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

img_e8b3d9bfdb05c2444e34a36996a75950.png

进入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爬虫:

img_b56a86346d38c44ac5812cfac4aad9bd.png

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

img_1c2598b79600cd5e4043a3cefcaa174c.png

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

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

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

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

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

img_4980c59eea7cc80fba4812de663dbb8d.png

如果有错的话,我们可以在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当做数据存储后端。存储的时间取决于订阅套餐的时间(免费试用是七天)。

制定周期抓取

img_f0f798ef02ead65235ae00d01523c303.png

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

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


序言
第1章 Scrapy介绍
第2章 理解HTML和XPath
第3章 爬虫基础
第4章 从Scrapy到移动应用
第5章 快速构建爬虫
第6章 Scrapinghub部署
第7章 配置和管理
第8章 Scrapy编程
第9章 使用Pipeline
第10章 理解Scrapy的性能
第11章(完) Scrapyd分布式抓取和实时分析


目录
相关文章
|
数据采集 存储 云安全
在阿里云Centos7.6上面部署基于redis的分布式爬虫scrapy-redis
Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时候,单个服务器的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来。 而Scrapy-Redis则是一个基于Redis的Scrapy分布式组件。它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule),并对爬取产生的项目(items)存储以供后续处理使用。scrapy-redi重写了scrapy一些比较关键的代码,将scrapy变成一个可以在多个主机上同时运行的分布式爬虫。
在阿里云Centos7.6上面部署基于redis的分布式爬虫scrapy-redis
|
数据采集 数据可视化 Python
python爬虫:scrapy可视化管理工具spiderkeeper部署
python爬虫:scrapy可视化管理工具spiderkeeper部署
528 0
python爬虫:scrapy可视化管理工具spiderkeeper部署
|
数据采集 监控 API
Scrapy部署之Scrapyd和Scrapyd-API
Scrapy部署之Scrapyd和Scrapyd-API
194 0
|
数据采集 存储 Web App开发
阿里云Centos7.6上面部署基于redis的分布式爬虫scrapy-redis将任务队列push进redis
Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。
1078 0
阿里云Centos7.6上面部署基于redis的分布式爬虫scrapy-redis将任务队列push进redis
|
数据采集 Python
Scrapy框架-通过Scrapyd来部署爬虫
前言 爬虫写完了,很多时候本机部署就可以了,但是总有需要部署到服务器的需求,网上的文章也比较多,复制的也比较多,从下午3点钟摸索到晚上22点,这里记录一下。
2030 0
|
NoSQL Redis 数据安全/隐私保护
在阿里云服务器使用scrapyd部署scrapy项目
前言 分布式爬虫,总归是要上到服务器的。 这里先讲解如何在服务器上配置和部署scrapyd,主要的点还是在scrapyd和redis的conf配置文件上。
3448 0
|
Python 机器学习/深度学习
Learning Scrapy 第二版
下载链接:https://share.weiyun.com/5LZAI1S 《Learning Scrapy》的第二版马上就要正式出版了(2018年6月11日;本书跳票了),Packt已经在网站上提供了下载链接(需付费),但可惜是个先早版,只有前四章。
1399 0
|
数据采集 JavaScript 中间件
《Learning Scrapy》(中文版)第8章 Scrapy编程
序言第1章 Scrapy介绍第2章 理解HTML和XPath第3章 爬虫基础 第4章 从Scrapy到移动应用第5章 快速构建爬虫第6章 Scrapinghub部署第7章 配置和管理 第8章 Scrapy编程第9章 使用Pipeline第10章 理解Scrapy的性能第11章(完) Scrapyd分布式抓取和实时分析 到目前为止,我们创建爬虫的目的是抓取数据,并提取信息。
1129 0
|
数据采集 Python 数据库
《Learning Scrapy》(中文版)0 序言
序言第1章 Scrapy介绍第2章 理解HTML和XPath第3章 爬虫基础 第4章 从Scrapy到移动应用第5章 快速构建爬虫第6章 Scrapinghub部署第7章 配置和管理第8章 Scrapy编程第9章 使用Pipeline第10章 理解Scrapy的性能第11章(完) Scrapyd分布式抓取和实时分析 作者简介 Dimitris Kouzis – Loukas有超过15年的软件开发经历。
1593 0
|
NoSQL 关系型数据库 API
《Learning Scrapy》(中文版)第9章 使用Pipelines
序言第1章 Scrapy介绍第2章 理解HTML和XPath第3章 爬虫基础 第4章 从Scrapy到移动应用第5章 快速构建爬虫第6章 Scrapinghub部署第7章 配置和管理第8章 Scrapy编程 第9章 使用Pipeline第10章 理解Scrapy的性能第11章(完) Scrapyd分布式抓取和实时分析 在上一章,我们学习了如何辨析Scrapy中间件。
1421 0