我的垃圾代码是这样的:
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,
}我是这样运行它的
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() #这是docs中推荐的方式。
问题是,在我运行上面的脚本之后,我不能再次运行它。Jupyter notebook返回错误ReactorNotRestartable

如果我在jupyter中重新启动内核,那么第一次运行就可以了。
我认为这个问题在Scrapy crawl from script always blocks script execution after scraping中已经说明了
我也许可以通过使用他们的代码来解决这个问题。然而,他们的代码对于这么小的东西来说是相当复杂的,与文档中推荐的CrawlerProcess方式相去甚远。
我想知道是否有更好的方法来解决这个问题?
我尝试在脚本末尾添加process.stop()。这没什么用。
发布于 2019-01-31 21:50:04
在使用笔记本电脑时,我相信您必须遵循Running Scrapy as a Script中描述的方法之一。
https://stackoverflow.com/questions/42242100
复制相似问题