gpt4 book ai didi

web-scraping - 在同一进程中运行多个蜘蛛,一次一个蜘蛛

转载 作者:行者123 更新时间:2023-12-03 07:46:26 25 4
gpt4 key购买 nike

我有一个情况,我有一个 CrawlSpider,它使用邮政编码和类别(POST 数据)搜索结果。我需要获取所有邮政编码中所有类别的所有结果。我的蜘蛛采用邮政编码和类别作为 POST 数据的参数。我想通过脚本以编程方式为每个邮政编码/类别组合启动一个蜘蛛。

文档解释了您可以使用以下代码示例在每个进程运行多个蜘蛛:http://doc.scrapy.org/en/latest/topics/practices.html#running-multiple-spiders-in-the-same-process这与我想做的事情是一样的,但是我想本质上对蜘蛛进行排队,以便在前一个蜘蛛完成后一个接一个地运行。

关于如何实现这一目标有什么想法吗?似乎有一些答案适用于较旧版本的 scrapy (~0.13),但架构已发生变化,它们不再适用于最新的稳定版 (0.24.4)

最佳答案

您可以信赖 spider_closed signal开始抓取下一个邮政编码/类别。这是基于 this answer 的示例代码(未测试)并针对您的用例采用:

from scrapy.crawler import Crawler
from scrapy import log, signals
from scrapy.settings import Settings
from twisted.internet import reactor

# for the sake of an example, sample postal codes
postal_codes = ['10801', '10802', '10803']


def configure_crawler(postal_code):
spider = MySpider(postal_code)

# configure signals
crawler.signals.connect(callback, signal=signals.spider_closed)

# detach spider
crawler._spider = None

# configure and start the crawler
crawler.configure()
crawler.crawl(spider)


# callback fired when the spider is closed
def callback(spider, reason):
try:
postal_code = postal_codes.pop()
configure_crawler(postal_code)
except IndexError:
# stop the reactor if no postal codes left
reactor.stop()


settings = Settings()
crawler = Crawler(settings)
configure_crawler(postal_codes.pop())
crawler.start()

# start logging
log.start()

# start the reactor (blocks execution)
reactor.run()

关于web-scraping - 在同一进程中运行多个蜘蛛,一次一个蜘蛛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28026849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com