gpt4 book ai didi

python - 如何使用不同的输入多次运行蜘蛛

转载 作者:行者123 更新时间:2023-12-03 14:37:48 25 4
gpt4 key购买 nike

我正在尝试从不同网站上抓取有关某些产品的信息。这是我的程序的结构:

product_list = [iPad, iPhone, AirPods, ...]

def spider_tmall:
self.driver.find_element_by_id('searchKeywords').send_keys(inputlist[a])

# ...


def spider_jd:
self.driver.find_element_by_id('searchKeywords').send_keys(inputlist[a])

# ...

if __name__ == '__main__':

for a in range(len(inputlist)):
process = CrawlerProcess(settings={
"FEEDS": {
"itemtmall.csv": {"format": "csv",
'fields': ['product_name_tmall', 'product_price_tmall', 'product_discount_tmall'], },
"itemjd.csv": {"format": "csv",
'fields': ['product_name_jd', 'product_price_jd', 'product_discount_jd'], },
})

process.crawl(tmallSpider)
process.crawl(jdSpider)
process.start()
基本上,我想为 product_list 中的所有输入运行所有蜘蛛。 .现在,我的程序只运行一次所有蜘蛛(在这种情况下,它为 iPad 工作)然后有 ReactorNotRestartable错误,程序终止。有人知道如何解决吗?
此外,我的总体目标是多次运行蜘蛛,输入不一定是列表。它可以是 CSV 文件或其他文件。任何建议将不胜感激!

最佳答案

当您调用 process.start() Scrapy的CrawlerProcess将启动一个 Twisted reactor,默认情况下将在爬虫完成时停止并且不应该重新启动它。您可以尝试的一种可能的解决方案是使用 stop_after_crawl 执行。 param设置为 False :

 process.start(stop_after_crawl=False)
这将防止 react 堆停止,绕过重启问题。虽然我不能说它不会进一步导致其他问题,所以你应该测试它以确定。
documentation还有一个在同一进程中运行多个蜘蛛的示例,其中一个主动运行/停止 react 器,但它使用 CrawlerRunner而不是 CrawlerProcess .
最后,如果上面的解决方案没有帮助,我建议尝试这个:
if __name__ == '__main__':

process = CrawlerProcess(settings={
"FEEDS": {
"itemtmall.csv": {"format": "csv",
'fields': ['product_name_tmall', 'product_price_tmall', 'product_discount_tmall'], },
"itemjd.csv": {"format": "csv",
'fields': ['product_name_jd', 'product_price_jd', 'product_discount_jd'], },
})
for a in range(len(inputlist)):
process.crawl(tmallSpider)
process.crawl(jdSpider)
process.start()
这里的要点是该过程仅在循环外启动一次, CrawlerProcess 实例化也在循环之外 ,否则每次迭代都会覆盖 CrawlerProcess 的前一个实例.

关于python - 如何使用不同的输入多次运行蜘蛛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63051510/

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