【发布时间】:2017-11-30 23:11:08
【问题描述】:
在您将我链接到与此相关的其他答案之前,请注意我已阅读它们并且仍然有点困惑。好的,我们开始吧。
所以我在 Django 中创建了一个 webapp。我正在导入最新的 scrapy 库来抓取网站。我没有使用芹菜(我对此知之甚少,但在与此相关的其他主题中看到过)。
我们网站的其中一个网址 /crawl/ 用于启动爬虫运行。这是我们网站中唯一需要使用scrapy 的网址。这是访问 url 时调用的函数:
def crawl(request):
configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s'})
runner = CrawlerRunner()
d = runner.crawl(ReviewSpider)
d.addBoth(lambda _: reactor.stop())
reactor.run() # the script will block here until the crawling is finished
return render(request, 'index.html')
您会注意到这是对他们网站上的 scrapy 教程的改编。当服务器开始运行时第一次访问这个 url,一切都按预期工作。第二次及以后,抛出 ReactorNotRestartable 异常。据我了解,当一个已经停止的反应堆被发出重新启动的命令时会发生这种异常,这是不可能的。
查看示例代码,我假设“runner = CrawlerRunner()”行将在每次访问此 url 时返回一个 ~new~ 反应器。但我相信也许我对扭曲反应堆的理解并不完全清楚。
每次访问此 URL 时,我将如何获取和运行新反应器?
非常感谢
【问题讨论】:
标签: django web-applications scrapy twisted reactor