Scrapy:无法在Jupyter Notebook脚本中重新运行,报告ReactorNotRestartable

cqc*_*991 5 python scrapy jupyter-notebook

我的草率代码如下所示:

import scrapy
from scrapy.crawler import CrawlerProcess

class MovieSpider(scrapy.Spider):
    name = "movies"
    start_urls = [
        'https://movie.douban.com/subject/25934014/',
        'https://movie.douban.com/subject/25852314/',
    ]

    def parse(self, response):
        title = response.css('div#wrapper div#content h1 span::text').extract_first()
        year = response.css('div#wrapper div#content h1 span.year::text').extract_first()
        yield {
            'url': response.url,
            'title': title,
            'year': year,
        }
Run Code Online (Sandbox Code Playgroud)

我这样运行

process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
    'FEED_FORMAT': 'json',
    'FEED_URI': 'movie.json',
    'FEED_EXPORT_ENCODING':'utf-8'
})

process.crawl(MovieSpider)
process.start() #
Run Code Online (Sandbox Code Playgroud)

这是docs中推荐的方式。

问题在于,运行上述脚本后,无法再次运行它。Jupyter Notebook返回错误ReactorNotRestartable

在此处输入图片说明

如果我在jupyter中重新启动内核,则可以第一次运行。

我认为问题是在脚本的Scrapy抓取中指出的,始终抓取后阻止脚本执行

我可能可以通过使用他们的代码来解决此问题。但是,对于这么小的事情,它们的代码非常复杂,并且CrawlerProcess与文档中推荐的方式相去甚远。

我想知道是否有更好的方法来解决这个问题?

我尝试process.stop()在脚本末尾添加。它没有帮助。