使用scrapyd一次运行多个scrapy蜘蛛

use*_*453 10 python screen-scraping scrapy scrapyd

我正在使用scrapy进行一个项目,我想要刮掉一些网站 - 可能是数百个 - 我必须为每个网站编写一个特定的蜘蛛.我可以使用以下方法在部署到scrapyd的项目中安排一个蜘蛛:

curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
Run Code Online (Sandbox Code Playgroud)

但是如何一次安排项目中的所有蜘蛛呢?

所有帮助非常感谢!

dru*_*dru 23

我一次运行200多个蜘蛛的解决方案是为项目创建一个自定义命令.有关实现自定义命令的更多信息,请参见http://doc.scrapy.org/en/latest/topics/commands.html#custom-project-commands.

YOURPROJECTNAME/commands/allcrawl.py:

from scrapy.command import ScrapyCommand
import urllib
import urllib2
from scrapy import log

class AllCrawlCommand(ScrapyCommand):

    requires_project = True
    default_settings = {'LOG_ENABLED': False}

    def short_desc(self):
        return "Schedule a run for all available spiders"

    def run(self, args, opts):
        url = 'http://localhost:6800/schedule.json'
        for s in self.crawler.spiders.list():
            values = {'project' : 'YOUR_PROJECT_NAME', 'spider' : s}
            data = urllib.urlencode(values)
            req = urllib2.Request(url, data)
            response = urllib2.urlopen(req)
            log.msg(response)
Run Code Online (Sandbox Code Playgroud)

确保在settings.py中包含以下内容

COMMANDS_MODULE = 'YOURPROJECTNAME.commands'
Run Code Online (Sandbox Code Playgroud)

然后从命令行(在项目目录中),您只需键入

scrapy allcrawl
Run Code Online (Sandbox Code Playgroud)

  • 任何人都可以解释我,这个自定义命令如何爬行多个蜘蛛? (3认同)