Python 在Google云函数中运行一个Scrapy spider
我目前正试图让scrapy在谷歌云功能中运行Python 在Google云函数中运行一个Scrapy spider,python,scrapy,google-cloud-functions,Python,Scrapy,Google Cloud Functions,我目前正试图让scrapy在谷歌云功能中运行 from flask import escape from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings def hello_http(request): settings = get_project_settings() process = CrawlerProcess(settings)
from flask import escape
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
def hello_http(request):
settings = get_project_settings()
process = CrawlerProcess(settings)
process.crawl(BlogSpider)
process.start()
return 'Hello {}!'.format(escape("Word"))
这是可行的,但奇怪的是,并不是“一直”。
每隔一次,HTTP调用将返回一个错误,然后我可以读取堆栈驱动程序:
函数执行耗时509毫秒,完成状态为:“崩溃”
我检查了爬行器,甚至将其简化为不会失败的功能,例如:
import scrapy
class BlogSpider(scrapy.Spider):
name = 'blogspider'
start_urls = ['https://blog.scrapinghub.com']
def parse(self, response):
yield { 'id': 1 }
有人能给我解释一下发生了什么事吗
这可能是我达到的资源配额吗
代码似乎很好。一个可能的问题是设置文件位于main.py文件的子目录中。使用正确的文件夹路径加载文件
settings_file_path = '<main_folder>.<sub_folder>.settings'
os.environ.setdefault('SCRAPY_SETTINGS_MODULE', settings_file_path)
settings = get_project_settings()
settings.setdict({
'LOG_LEVEL': 'ERROR',
'LOG_ENABLED': True,
})
process = CrawlerProcess(settings)
process.crawl(BlogSpider)
process.start()
return 'OK'
设置文件路径=“…设置”
os.environ.setdefault('SCRAPY\u SETTINGS\u MODULE',SETTINGS\u file\u path)
设置=获取项目设置()
settings.setdict({
“日志级别”:“错误”,
“已启用日志”:True,
})
进程=爬网进程(设置)
进程爬网(BlogSpider)
process.start()
返回“OK”
这段代码似乎与我的google cloud功能配合使用。我不知道第一个代码块与第二个代码块的关系。云功能在哪里使用
BlogSpider
?是的,对不起,这只是一个输入错误。我修复了它。我一直在试图重现您的问题,据我所知,函数第一次运行时,一切都按预期运行。再次执行该函数后,我可以看到以下错误:twisted.internet.error.ReactorNotRestartable。就我所知,这似乎不起作用,因为每个过程只有一个反应器,不能启动两次。我发现您可以尝试实现类似的功能。我希望它能帮助我找到这篇可能有用的文章:和。根据,当运行Scrapy crawl时,Scrapy在每个进程中运行一个spider。但是,Scrapy支持使用内部API在每个进程中运行多个spider@ChristopherRodriguezConde的解决方案让我走上了正确的道路。我在这里写到: