我想为我在蜘蛛的 start_urls 中设置的每个 url 创建单独的输出文件,或者想以某种方式拆分输出文件 start url 明智。
以下是我的蜘蛛的 start_urls
start_urls = ['http://www.dmoz.org/Arts/', 'http://www.dmoz.org/Business/', 'http://www.dmoz.org/Computers/']
我想创建单独的输出文件,如
Arts.xml
Business.xml
Computers.xml
我不知道该怎么做。我正在考虑通过在项目管道类的 spider_opened 方法中实现一些类似的东西来实现这一点,
import re
from scrapy import signals
from scrapy.contrib.exporter import XmlItemExporter
class CleanDataPipeline(object):
def __init__(self):
self.cnt = 0
self.filename = ''
@classmethod
def from_crawler(cls, crawler):
pipeline = cls()
crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
return pipeline
def spider_opened(self, spider):
referer_url = response.request.headers.get('referer', None)
if referer_url in spider.start_urls:
catname = re.search(r'/(.*)$', referer_url, re.I)
self.filename = catname.group(1)
file = open('output/' + str(self.cnt) + '_' + self.filename + '.xml', 'w+b')
self.exporter = XmlItemExporter(file)
self.exporter.start_exporting()
def spider_closed(self, spider):
self.exporter.finish_exporting()
#file.close()
def process_item(self, item, spider):
self.cnt = self.cnt + 1
self.spider_closed(spider)
self.spider_opened(spider)
self.exporter.export_item(item)
return item
我试图在 start_urls 列表中找到每个抓取项目的引用 url。如果在 start_urls 中找到引用 URL,则将使用该引用 URL 创建文件名。但问题是如何在 spider_opened() 方法中访问响应对象。如果我可以在那里访问它,我可以基于它创建文件。
有什么帮助可以找到执行此操作的方法吗?提前致谢!