我有一个file_name字典,url每个URL应该是scrapy spider的start_url,并在收集要写入file_name的项目之后
search_dict={'hello world':'https://www.google.com/search?q=hello+world',
'my code':'https://www.google.com/search?q=stackoverflow+questions',
'test':'https://www.google.com/search?q="test"'}
process = CrawlerProcess({
'DOWNLOAD_DELAY': 0,
'LOG_LEVEL': 'DEBUG',
'CONCURRENT_REQUESTS':10,
'CONCURRENT_REQUESTS_PER_DOMAIN':10,
'AUTOTHROTTLE_ENABLED':False,
})
for file_name,url in search_dict.items():
last_call = []
process.crawl(amazonscraper,start_urls=[url],found_items=[])
spider = next(iter(process.crawlers)).spider
process.start()
now = datetime.datetime.now()
current_date = now.strftime("%d%b")
with open("{}_{}.csv".format(current_date,file_name),"w") as csvfile:
dict_writer = csv.DictWriter(csvfile, keys)
dict_writer.writeheader()
dict_writer.writerows(spider.found_items)
我得到的错误是
`File "/home/test/.local/lib/python3.6/site-packages/twisted/internet/base.py", line 754, in startRunning
raise error.ReactorNotRestartable()
twisted.internet.error.ReactorNotRestartable
在阅读Scrapy - Reactor not Restartable之后,指出我不应该重新启动Reactor。
这是刮spider蜘蛛的杰作
class amazonscraper(scrapy.Spider):
name='test'
def parse(self,response):
#code
yield scrapy.Request(url=url,callback=self.parse_more,meta={'item': item}
def parse_more(self,response):
#code
self.found_items.append(item)
我已经问了一个非常类似的问题,但是答案setting start urls for scrapy outside of class无效。
我的问题是,如何在课程外为每个指向其各自file_name的URL写入found_items
,或者是否可以在课程中进行操作。
注意:上面的代码是一个独立文件,不是Scrapy项目,因此,如果可以通过某些管道执行该脚本,那么我该如何使用管道