scrapyd deploy通过scrapyd-client显示0个蜘蛛

时间:2015-11-11 08:30:00

标签: scrapy scrapy-spider

我发现我的问题与scrapyd deploy shows 0 spiders非常相似。我也多次尝试过接受的答案,但它对我没有用,所以我来寻求帮助。

项目目录是timediff_crawler,目录的树视图是:

timediff_crawler/
├── scrapy.cfg
├── scrapyd-deploy
├── timediff_crawler
│   ├── __init__.py
│   ├── items.py
│   ├── pipelines.py
│   ├── settings.py
│   ├── spiders
│   │   ├── __init__.py
│   │   ├── prod
│   │   │   ├── __init__.py
│   │   │   ├── job
│   │   │   │   ├── __init__.py
│   │   │   │   ├── zhuopin.py
│   │   │   ├── rent
│   │   │   │   ├── australia_rent.py
│   │   │   │   ├── canada_rent.py
│   │   │   │   ├── germany_rent.py
│   │   │   │   ├── __init__.py
│   │   │   │   ├── korea_rent.py
│   │   │   │   ├── singapore_rent.py
...

1.1开始报废,没关系

(crawl_env)web@ha-2:/opt/crawler$ scrapyd
2015-11-11 15:00:37+0800 [-] Log opened.
2015-11-11 15:00:37+0800 [-] twistd 15.4.0 (/opt/crawler/crawl_env/bin/python 2.7.6) starting up.
2015-11-11 15:00:37+0800 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
2015-11-11 15:00:37+0800 [-] Site starting on 6800
...

1.2编辑scrapy.cfg

[settings]
default = timediff_crawler.settings

[deploy:ha2-crawl]
url = http://localhost:6800/
project = timediff_crawler

1.3部署项目

(crawl_env)web@ha-2:/opt/crawler/timediff_crawler$ ./scrapyd-deploy -l
ha2-crawl            http://localhost:6800/

(crawl_env)web@ha-2:/opt/crawler/timediff_crawler$ ./scrapyd-deploy ha2-crawl -p timediff_crawler
Packing version 1447229952
Deploying to project "timediff_crawler" in http://localhost:6800/addversion.json
Server response (200):
{"status": "ok", "project": "timediff_crawler", "version": "1447229952", "spiders": 0, "node_name": "ha-2"}

1.4问题

响应显示蜘蛛数为0,实际上我有大约10只蜘蛛。

我按照这篇文章scrapyd deploy shows 0 spiders中的建议,删除了所有项目,版本,目录(包括build / eggs / project.egg-info setup.py)并尝试再次部署,但它没有'工作时,蜘蛛的数量始终为0.

我验证了egg文件,输出显示似乎没问题:

(crawl_env)web@ha-2:/opt/crawler/timediff_crawler/eggs/timediff_crawler$ unzip -t 1447229952.egg 
Archive:  1447229952.egg

testing: timediff_crawler/pipelines.py   OK
testing: timediff_crawler/__init__.py   OK
testing: timediff_crawler/items.py   OK
testing: timediff_crawler/spiders/prod/job/zhuopin.py   OK
testing: timediff_crawler/spiders/prod/rent/singapore_rent.py   OK
testing: timediff_crawler/spiders/prod/rent/australia_rent.py   OK
...

所以我不知道出了什么问题,请提前帮助和谢谢!

4 个答案:

答案 0 :(得分:4)

感谢@ LearnAWK的建议,问题是由settings.py中的以下配置引起的:

LOG_STDOUT = True

实际上我并不知道为什么这种配置会影响scrapyd的结果。

答案 1 :(得分:0)

蜘蛛应位于spiders的文件夹中,而不是子文件夹。

以下是我的scrapy项目的基本文件夹中的目录树。你的问题类似吗?

my_scrapy_project/   
├── CAPjobs    
│   └── spiders    
│       └── oldspiders    
├── build    
│   ├── bdist.macosx-10.9-x86_64    
│   └── lib    
│       └── CAPjobs    
│           └── spiders    
├── db    
├── dbs    
├── eggs    
│   └── CAPjobs    
├── items    
│   └── CAPjobs    
│       ├── spider1    
│       ├── spider2    
│       └── spider3    
├── logs   
│   └── CAPjobs    
│       ├── spider1    
│       ├── spider2    
│       └── spider3 
└── project.egg-info    

答案 2 :(得分:0)

这是对这个帖子的迟到回复,但我相信我弄清楚为什么在向Scrapyd提交新项目版本时,报告了0个蜘蛛。

在我的情况下,我的蜘蛛有很多依赖项 - Redis,Elasticsearch,certifi(使用SSL连接到ES),等等。在不同的机器(生产系统)上运行Scrapyd,你必须完全复制你的Python依赖项。在本地计算机上,如果您使用相同的Python virtualenv活动,则不会遇到此问题。

我发现,使用标准的scrapy教程,我可以成功地向Scrapyd添加一个新的项目版本。从那里开始,我开始剥离并在我的蜘蛛中注释出代码和导入行,直到我能够成功地将它们添加到Scrapyd。当我可以通过取消注释单个导入来让scrapyd-deploy报告0蜘蛛时,我突然意识到这是一个依赖性问题。

希望这可以帮助其他人遇到同样的问题。

如果存在失败的依赖项,那么在部署响应中返回scrapyd报告会非常好。

答案 3 :(得分:0)

开发环境与生产不同。 Scrapyd找不到其他课程。尝试在spider文件夹下移动相关的类或模块。然后再次给出正确的参考。

为了定义有问题的引用,您可以尝试逐个注释掉引用并尝试scrapy-deploy

├──Myapp
│└──蜘蛛
│├──bbc_spider.py

│──Tode.py

在开发环境中,这可以工作,但在使用scrapyd进行部署后,它可能不会。因为bbc_spider.py无法访问model.py。 如果愿意,可以将model.py下移到spider文件夹中。我解决了这样的问题。