【问题标题】:scrapyd deploy shows 0 spiders by scrapyd-clientscrapyd deploy 通过 scrapyd-client 显示 0 个蜘蛛
【发布时间】:2018-02-23 13:58:00
【问题描述】:

我发现我的问题和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启动scrapyd,就ok了

(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/egg/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
...

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

【问题讨论】:

  • 你能分享你的设置文件吗?创建一个pastebin
  • @eLRuLL,这里:settings.py
  • 尝试将SPIDER_MODULES 更改为蜘蛛所在的路径:例如['timediff_crawler.spiders.prod.job']。
  • @eLRuLL 我又试了一次,还是不行。我也试过把所有spider源文件直接放到timediff_crawler/spiders里,也不行。
  • 当你运行scrapy list时,它会列出你的蜘蛛吗?

标签: scrapy scrapy-spider


【解决方案1】:

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

LOG_STDOUT = True

其实我不知道为什么这个配置会影响scrapyd的结果。

【讨论】:

  • 很高兴您的问题得到了解决。它会在未来帮助一些人。
【解决方案2】:

蜘蛛应该在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    

【讨论】:

  • 我尝试将所有蜘蛛放入spiders 文件夹,但没有成功。
  • 你把所有蜘蛛移到spiders文件夹后,你有没有删除之前scrapyd-deploy尝试生成的所有文件夹和文件?您是否从localhost:6800 中删除了该项目?你重启localhost:6800了吗?重试之前scrapyd-deploy?
  • 如果还是不行,我的建议是用新文件夹重新启动一个新的scrapy项目。然后将当前scrapy文件的非常基本的元素复制到新文件夹中,一次一个蜘蛛。看看你有没有运气。
  • 感谢 LearnAWK 的 建议,我想我找到了问题所在。在settings.py 中,我添加了以下配置: LOG_ENABLED = True LOG_LEVEL = 'INFO' LOG_STDOUT = True LOG_STDOUT = True 是原因,当注释掉它时,一切正常。顺便说一句,蜘蛛可能位于spiders 文件夹的子文件夹中。
  • spiders 的子文件夹非常有趣:我有一个子文件夹,其中包含一些当前项目不需要的蜘蛛脚本。这些文件在scrapyd-deploy 命令期间未显示。看来我的经历有点不同。
【解决方案3】:

这是对该主题的较晚回复,但我相信我知道为什么在向 Scrapyd 提交新项目版本时,会报告 0 个蜘蛛。

在我的例子中,我的蜘蛛有很多依赖项——Redis、Elasticsearch、certifi(用于使用 SSL 连接到 ES)等。在不同的机器(生产系统)上运行 Scrapyd,你必须准确地复制你的 Python 依赖项。在本地计算机上,如果您有相同的 Python virtualenv 处于活动状态,则不会遇到问题。

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

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

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

【讨论】:

    【解决方案4】:

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

    要定义有问题的引用,您可以尝试将引用一一注释掉并尝试scrapy-deploy

    ├── 我的应用程序
    │ └── 蜘蛛
    │ ├── bbc_spider.py

    │── Model.py

    在开发环境中这是可行的,但在通过 scrapyd 部署后它可能不会。因为 bbc_spider.py 无法到达 model.py 。 如果愿意,请将 model.py 移动到 spider 文件夹。我解决了这样的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多