gpt4 book ai didi

python - 当 Scrapy 蜘蛛完成爬行时运行代码

转载 作者:行者123 更新时间:2023-12-04 15:23:42 25 4
gpt4 key购买 nike

一旦爬行完全完成以处理移动/清理数据,有没有办法让 Scrapy 执行代码?我确信这是微不足道的,但我的 Google-fu 似乎让我离开了这个问题。

最佳答案

这完全取决于您如何启动 Scrapy。

如果从命令行运行 crawlrunspider ,只需等待该过程完成即可。请注意 0 退出代码 won't mean您已成功抓取所有内容。

using as a library , 您可以在 CrawlerProcess.start() 后附加代码称呼。

如果您需要可靠地跟踪状态,首先您要做的就是跟踪 spider_closed 发出信号并检查其 reason范围。 the page开头有一个例子,它希望你修改蜘蛛的代码。

在用作库时跟踪您添加的所有蜘蛛:

process = CrawlerProcess({})
process.crawl(MySpider)

def spider_ended(spider, reason):
print('Spider ended:', spider.name, reason)

for crawler in process.crawlers:
crawler.signals.connect(spider_ended, signal=scrapy.signals.spider_closed)

process.start()

检查 reason , 如果不是 'finished' ,有什么东西打断了爬虫。
该函数将为每个蜘蛛调用,因此如果您有很多蜘蛛,它可能需要一些复杂的错误处理。还要记住,在收到两次键盘中断后,Scrapy 开始不正常关闭并且不会调用该函数,而是放置在 process.start() 之后的代码。无论如何都会运行。

或者,您可以使用 extensions连接到这些信号的机制,而不会弄乱代码库的其余部分。 sample extension显示如何跟踪此信号。

但所有这一切只是为了检测由于中断而导致的故障。您还需要订阅 spider_error 在蜘蛛中出现 Python 异常时将调用的信号。还有网络错误处理必须完成,见 this question .

最后,我放弃了跟踪失败的想法,只用在 process.start() 之后检查的全局变量来跟踪成功。返回。就我而言,成功的时刻不是找到“下一页”链接。但是我有一个线性抓取刀,所以很容易,你的情况可能会有所不同。

关于python - 当 Scrapy 蜘蛛完成爬行时运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17363458/

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