gpt4 book ai didi

python - 尝试在 AWS Lambda 上测试 Scrapy Web-Crawler 时出现此错误 "raise error.reactornotrestartable() "

转载 作者:行者123 更新时间:2023-12-05 07:08:28 27 4
gpt4 key购买 nike

我将网络爬虫部署到 AWS Lambda。然后在测试的时候,第一次运行正确,但是第二次就报这个错。在 AWS lambda 中引发 error.reactornotrestartable() twisted.internet.error.reactornotrestartable

File "/var/task/main.py", line 19, in run_spider
reactor.run()
File "/var/task/twisted/internet/base.py", line 1282, in run
self.startRunning(installSignalHandlers=installSignalHandlers)
File "/var/task/twisted/internet/base.py", line 1262, in startRunning
ReactorBase.startRunning(self)
File "/var/task/twisted/internet/base.py", line 765, in startRunning
raise error.ReactorNotRestartable()
twisted.internet.error.ReactorNotRestartable

爬虫在我的本地 python 环境中运行良好。我试图在 main.py 中运行的函数是这个

def run_spider(event, s):
given_links = []
print(given_links)
for t in event["Records"]:
given_links.append(t["body"])
runner = CrawlerRunner(s)
deferred = runner.crawl('spider', crawl_links=given_links)
deferred.addCallback(lambda _: reactor.stop())
reactor.run()

def lambda_handler(event, context=None):
s = get_project_settings()
s['FEED_FORMAT'] = 'csv'
s['FEED_URI'] = '/tmp/output.csv'
run_spider(event, s)

事件看起来像这样:

{
"Records": [
{
"body": "https://example.com"
}
]
}

最初,我使用的是 CrawlerProcess 而不是 CrawlerRunner,但它也给出了同样的错误。然后在查看了 StackOverflow 上的一些答案后,我更改了我的代码以使用 CrawlerRunner。也有人建议使用 Crochet,我试过了,但出现了这个错误:

ValueError: signal only works in main thread in scrapy

我该怎么做才能解决这个错误?

最佳答案

我在 AWS lambda 上遇到错误 ReactorNotRestartable 并且在我找到这个解决方案之后

默认情况下,scrapy 的异步特性不适用于 Cloud Functions,因为我们需要一种方法来阻止抓取以防止函数提前返回和实例在进程终止之前被杀死。

相反,我们可以使用 scrapydo 以阻塞方式运行您现有的蜘蛛:

import scrapy
import scrapy.crawler as crawler
rom scrapy.spiders import CrawlSpider
import scrapydo

scrapydo.setup()

# your spider
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ['http://quotes.toscrape.com/tag/humor/']

def parse(self, response):
for quote in response.css('div.quote'):
print(quote.css('span.text::text').extract_first())

scrapydo.run_spider(QuotesSpider)

关于python - 尝试在 AWS Lambda 上测试 Scrapy Web-Crawler 时出现此错误 "raise error.reactornotrestartable() ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61870496/

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