如何部署scrapy redis 部署到Scrapyd上

Scrapyd 部署 - 简书
Scrapyd 部署
scrapy爬虫写好后,需要用命令行运行,如果能在网页上操作就比较方便。scrapyd部署就是为了解决这个问题,能够在网页端查看正在执行的任务,也能新建爬虫任务,和终止爬虫任务,功能比较强大。
1,安装scrapyd
pip install scrapyd
2, 安装 scrapyd-deploy
pip install scrapyd-client
windows系统,在c:\python27\Scripts下生成的是scrapyd-deploy,无法直接在命令行里运行scrapd-deploy。解决办法:在c:\python27\Scripts下新建一个scrapyd-deploy.bat,文件内容如下:
C:\Python27\python C:\Python27\Scripts\scrapyd-deploy %*
添加环境变量:C:\Python27\S
1,运行scrapyd
首先切换命令行路径到Scrapy项目的根目录下,要执行以下的命令,需要先在命令行里执行scrapyd,将scrapyd运行起来
MacBook-Pro:~ usera$ scrapyd
/usr/local/bin/scrapyd:5: UserWarning: Module _markerlib was already imported from /Library/Python/2.7/site-packages/distribute-0.6.49-py2.7.egg/_markerlib/__init__.pyc, but /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python is being added to sys.path
from pkg_resources import load_entry_point
16:00:21+0800 [-] Log opened.
16:00:21+0800 [-] twistd 15.5.0 (/usr/bin/python 2.7.10) starting up.
16:00:21+0800 [-] reactor class: twisted.internet.selectreactor.SelectReactor.
16:00:21+0800 [-] Site starting on 6800
16:00:21+0800 [-] Starting factory &twisted.web.server.Site instance at 0x102a21518&
16:00:21+0800 [Launcher] Scrapyd 1.1.0 started: max_proc=16, runner='scrapyd.runner'
2,发布工程到scrapyd
a,配置scrapy.cfg
在scrapy.cfg中,取消#url = ,然后在命令行中切换命令至scrapy工程根目录,运行命令:
scrapyd-deploy &target& -p &project&
scrapd-deploy -p MySpider
验证是否发布成功
scrapyd-deploy -l
http://localhost:6800/
一,开始使用
1,先启动 scrapyd,在命令行中执行:
MyMacBook-Pro:MySpiderProject user$ scrapyd
2,创建爬虫任务
curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
bug:scrapyd deploy shows 0 spiders by scrapyd-clientscrapy中有的spider不出现,显示只有0个spiders。
解决需要注释掉settings中的# LOG_LEVEL = "ERROR"
# LOG_STDOUT = True
# LOG_FILE = "/tmp/spider.log"
# LOG_FORMAT = "%(asctime)s [%(name)s] %(levelname)s: %(message)s"
When setting LOG_STDOUT=True, scrapyd-deploy will return 'spiders: 0'. Because the output will be redirected to the file when execute 'scrapy list', like this: INFO:stdout:spider-name. Soget_spider_list can not parse it correctly.
3,查看爬虫任务
在网页中输入:
4,运行配置
配置文件:C:\Python27\Lib\site-packages\scrapyd-1.1.0-py2.7.egg\scrapyd\default_scrapyd.conf
jobs_to_keep = 50
max_proc_per_cpu = 4
finished_to_keep = 100
poll_interval = 5
= scrapyd.runner
application = scrapyd.app.application
= scrapyd.launcher.Launcher
[services]
schedule.json
= scrapyd.webservice.Schedule
cancel.json
= scrapyd.webservice.Cancel
addversion.json
= scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json
= scrapyd.webservice.ListSpiders
delproject.json
= scrapyd.webservice.DeleteProject
delversion.json
= scrapyd.webservice.DeleteVersion
listjobs.json
= scrapyd.webservice.ListJobs社区活跃度或者贡献越来越受到重视,往往会作为获得工作或者承接项目的加分项。为了方便用户展示自己的社区资料,中增加了一个社区爬虫功能。
当前只爬取了用户主页上一些简单的信息,如果有需求请提到我们的
代码放在了github上,
如图所示,在(,我增加了橙色虚线框内的部分,包括:
:一个用于运行爬虫任务的webservice
spiders:使用框架实现的爬虫
:存放爬取的数据
使用scrapy框架
是一个python爬虫框架,想要快速实现爬虫推荐使用这个。
可以参考如下资料自行学习:
,注意:博客中scrapy的安装步骤可以简化,直接使用 pip install scrapy,安装过程中可能会缺少几个lib,ubuntu使用 apt-get install libffi-dev libxml2-dev libxslt1-dev -y
使用mongodb存储数据
mongo非常适合存储爬虫数据,支持异构数据。这意味着你可以随时改变爬虫策略抓取不同的数据,而不用担心会和以前的数据冲突(使用sql就需要蛋疼的修改表结构了)。
通过scrapy的pipline来集成mongo,非常方便。
apt-get install mongodb
pip install pymongo
使用xpath提取页面数据
在编写爬虫的过程中需要使用xpath表达式来提取页面数据,在chrome中可以使用来定位元素,非常方便。使用方法:
打开XPath Helper插件
鼠标点击一下页面,按住shift键,把鼠标移动到需要选取的元素上,插件会将该元素标记为黄色,并给出对应的xpath表达式,如下图:
在爬虫程序中使用这个表达式selector.xpath(..../text()").extract()
使用scrapyd把爬虫集成到系统中
编写好爬虫后,我门可以通过执行scrapy crawl spidername命令来运行爬虫程序,但这还不够。
通常我们通过手动或者定时任务(cron)来执行爬虫,而这里我们需要通过web应用来触发爬虫。即,当用户更新绑定的社交账号时,去执行一次爬虫。来分析一下:
爬虫执行过程中会阻塞当前进程,为了不阻塞用户请求,必须通过异步的方式来运行爬虫。
可能有多个用户同时更新资料,这就要求能够同时执行多个爬虫,并且要保证系统不会超载。
可以扩展成分布式的爬虫。
方案1:使用celery运行爬虫
鉴于项目当前的架构,准备使用celery来执行异步爬虫。但是碰到了两个问题:
scrapy框架下,需要在scrapy目录下执行爬虫,否则无法获取到settings,这个用起来有点别扭,不过还能解决。
celery中反复运行scrapy的爬虫会报错:raise error.ReactorNotRestartable()。原因是scrapy用的twisted调度框架,不可以在进程中重启。
,尝试了一下,搞不定,放弃这个方案。如果你有解决这个问题的方法,期待分享:)
方案2:使用scrapyd
,是一个用于运行scrapy爬虫的webservice,使用者能够通过http请求来运行爬虫。
你只需要使用将爬虫发布到scrapyd中,然后通过如下命令就可以运行爬虫程序。
$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
{"status": "ok", "jobid": "26d1b1a6d6f111e0be5c001e648c57f8"}
这意味什么:
爬虫应用和自己的web应用完全解耦,只有一个http接口。
由于使用http接口,爬虫可以放在任何能够被访问的主机上运行。一个简易的分布式爬虫,不是吗?
scrapyd使用sqlite队列来保存爬虫任务,实现异步执行。
scrapyd可以同时执行多个爬虫,最大进程数可配,防止系统过载。
欢迎使用我们的爬虫功能来收集社交资料。
成为用户,进入用户主页,点击编辑按钮
填写社交账号,点击更新按钮
爬虫会在几秒内完成工作,刷新个人主页就能看到你的社区资料了,你也可以把个人主页链接附在电子简历中哟:)
你可能感兴趣的文章
2 收藏,389
21 收藏,2.8k
53 收藏,11.3k
本作品采用 署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
您好,对于使用celery调度scrapy我做了一些尝试,这是一个项目上的应用,不知道是不是最佳实践,但是是一种可行的方案。
谢谢分享,我尝试一下:)
关于反复运行爬虫我是这样解决的,希望有帮助
from multiprocessing import Process, Queue
def run_spider(spider, result_queue):
scraped_items = []
def aggregate_items(item, spider):
scraped_items.append(item)
return item
process = CrawlerProcess()
crawler = process.create_crawler(spider)
crawler.signals.connect(aggregate_items, signal=signals.item_scraped)
process.crawl(crawler)
process.start()
result_queue.put(scraped_items)
result_queue = Queue()
p = Process(target=run_spider, args=[spider, result_queue])
scraped_items = result_queue.get()
分享到微博?
技术专栏,帮你记录编程中的点滴,提升你对技术的理解收藏感兴趣的文章,丰富自己的知识库
明天提醒我
我要该,理由是:
扫扫下载 App安装上传工具1、上传工具scrapyd-client2、安装方法:pip install scrapyd-client3、上传方法:python d:\Python27\Scripts\scrapyd-deploy target -p project注:target -- 主机地址,如project -- 工程名,如stock_4、前提:①假设python安装位置d:\Python27\;②需进入工程目录下执行上传命令;③可选参数:--version r03,即:python d:\Python27\Scripts\scrapyd-deploy target -p project --version r03&安装调度工具curl1、Linux系统一般情况下Linux系统自带curl工具,如果没有请百度安装方法;2、Windows系统1、下载地址:链接: 密码:4lqh2、安装方法:&1)解压下载的文件夹,比如解压后的位置E:\bin-curl&2)添加解压后的文件夹路径到环境变量Path中,比如:
D:\Python27\;D:\Python27\Scripts\;E:\bin-curl\;***&3)重启电脑是环境变量生效;&4)测试,运行:curl --help 查看帮助信息;&调度爬虫1、添加版本信息curl
-F project=myproject -F
version=r23 -F egg=@myproject.egg2、调度spider执行curl
-d project=myproject -d
spider=somespider3、取消spider的执行curl
-d project=myproject -d
job=edab326d6db28a2d86514、列出工程curl 5、如何启动scrapyd,以及如何把一个现有的工程部署到scrapyd上面:第一步:输入scrapyd,敲击enter,等待:第二步:在这个服务器上部署工程,具体方法前面已经提到过第三步:调度spider:第四步:取消第五步:列出工程&总结1,能正确安装scrapyd-2,能够正确安装curl;3,学会project的上传和spider的调度;文章来源:麦子学院原文链接:
(四川成都)
麦子学院,中国IT在线教育领导品牌,
小麦麦子的最新日记
······
&(1人喜欢)
······
博物馆讲述难以言说的历史 · 323条内容
纪念汪老逝世二十周年 · 147条内容
以赤子之心澄澈映照世界 · 105条内容
你是一本读不完的书 · 858条内容
这一天,你在干什么? · 364条内容
关注权力关系下的性侵受害者 · 398条内容在开始之前先要吐槽一下CSDN,昨晚怀着激动得心情写下了我人生中的第一篇博文,今天审核通过后发现所有的图片都不见了,瞬间就不开心了。所以不得不又申请了博客园的账号,重新开始。
前段时间一直研究通用爬虫,做的过程中也是各种问题,不过好在磕磕绊绊搞出点眉目,中间学到了不少东西,感觉互联网真的好神奇。
但是接下来问题来了,写的爬虫不能老在自己机器上跑吧,如何部署到服务器上呢,然后就开始研究scrapyd。网上搜了很多资料,都在介绍scrapy deploy命令,但是我在机器上安装上scrapyd之后,怎么运行都是提示没有deploy这个命令,真是奇怪,为什么别人都可以呢。经过几番波折,终于在最新的官方文档里面找到了答案。附上地址和截图:http://doc.scrapy.org/en/latest/topics/commands.html
原来1.0版本以后这个命令已经废弃了,再一查我安装的版本是1.0.3。然后就根据提示去下载scrapyd-client。
本以为往后就会顺利一点,但是安装了scrapyd-client以后运行,还是一直提示没有scrapy-client命令。群里请教,网上查资料都没有解决,在我快绝望的时候终于在stack overflow上找到了答案。附上地址和截图:/questions//windows-scrapyd-deploy-is-not-recognized
根据人家提供的方法一试,果然OK,感觉SO真的好强大。
解决了以上问题,下面的部署就顺利的多了。记一下以方便以后查阅,也给像我一样的菜鸟一点参考。
我的scrapy.cfg设置如下:
[deploy:scrapyd1]
url = http://192.168.2.239:6800/
project = Crawler
1. 启动scrapyd
在要部署的服务器上启动scrapyd。显示以下内容表示启动成功。
默认的端口是6800。可以在浏览器中查看结果,比如:http://192.168.2.239:6800/。显示效果如下:
可以点击jobs查看爬虫运行情况:
2. 发布工程到scrapyd
scrapyd-deploy &target& -p &project&
首先要切换目录到项目所在路径,然后执行下列指令:
scrapyd-deploy scrapyd1 -p Crawler
3. 验证是否发布成功
scrapyd-deploy -L &target&
如果现实项目名称,表示发布成功。
scrapyd-deploy -L scrapyd1
也可以用scrapyd-deploy -l
4. 启动爬虫
curl http://192.168.2.239:6800/schedule.json -d project=Crawler -d spider=CommonSpider
通过页面可以实时监控爬虫运行效果:
5. 终止爬虫
curl http://192.168.2.239:6800/cancel.json -d project=Crawler -d job= d9811e5adbf000c29a5d5be
部署过程中可能会有很多错误,包括缺少第三方库啥的,自己根据提示即可解决。
以上只是对scrapyd的初步了解,很多深层的内容等慢慢研究以后会持续更新总结。如果以上内容哪里有不对的地方,请各位朋友及时回复交流,小弟在此谢过。
阅读(...) 评论()
本博客文章,大多系网络中收集,转载请注明出处
相关标签:、、

我要回帖

更多关于 scrapy 分布式部署 的文章

 

随机推荐