我正在尝试使用谷歌云功能发送多个爬网请求。然而,我似乎得到了ReactorNotRestartable
错误。从StackOverflow的其他帖子,比如this one,我理解这是因为不可能重新启动反应器,特别是在执行循环时
解决这个问题的方法是将start()
放在for循环之外。然而,对于云功能来说,这是不可能的,因为每个请求在技术上应该是独立的
CrawlerProcess
是否以某种方式使用云函数进行缓存?如果是这样,我们如何才能消除这种行为
例如,我尝试将导入和初始化过程放在函数内部,而不是外部,以防止缓存导入,但这不起作用:
# main.py
def run_single_crawl(data, context):
from scrapy.crawler import CrawlerProcess
process = CrawlerProcess()
process.crawl(MySpider)
process.start()
您可以简单地按顺序爬行蜘蛛
main.py
默认情况下,
scrapy
的异步特性不能很好地与云函数配合使用,因为我们需要一种阻止爬网的方法,以防止函数提前返回,并在进程终止之前杀死实例相反,我们可以使用^{} 以阻塞方式运行现有的spider:
requirements.txt
:main.py
:这还显示了一个简单的示例,说明如何从爬行器中生成一个或多个
scrapy.Item
,并从爬网中收集结果,如果不使用scrapydo
,这也是一个挑战另外:确保您的项目已启用计费功能。默认情况下,云函数不能发出出站请求,爬虫程序将成功,但不会返回任何结果
相关问题 更多 >
编程相关推荐