抓取的起始网址写入不同的文件

时间:2019-06-07 18:42:58

标签: python scrapy

我有一个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项目,因此,如果可以通过某些管道执行该脚本,那么我该如何使用管道

0 个答案:

没有答案