我正在研究scrapy,我在一个scrapy项目中创建了两个具有两个不同url的蜘蛛文件。
当单独运行时,两只蜘蛛完美地刮擦。实际上问题是每个 url 都有不同的项目要获取,因此在items.py
文件中声明了所有项目。在抓取之后,我将数据存储到使用蜘蛛名称动态创建的 csv 文件中。
因此,例如,当我需要运行时spider1
,我需要声明单独process_item
的方法,因为两个蜘蛛的项目不同,当我需要运行第二个蜘蛛时,我需要process_item
通过注释其他方法来编写另一个。在scrapy中是否有任何方法可以使用两个process_item方法?下面是我的pipeline.py
代码
管道.py
from w3c_browser.items import WCBrowserItem
import csv
from csv import DictWriter
from cStringIO import StringIO
from datetime import datetime
class W3CBrowserPipeline(object):
def __init__(self):
dispatcher.connect(self.spider_opened, signal=signals.spider_opened)
dispatcher.connect(self.spider_closed, signal=signals.spider_closed)
self.brandCategoryCsv = csv.writer(open('wcbbrowser.csv', 'wb'))
def spider_opened(self, spider):
spider.started_on = datetime.now()
if spider.name == 'browser_statistics':
log.msg("opened spider %s at time %s" % (spider.name,datetime.now().strftime('%H-%M-%S')))
self.brandCategoryCsv = csv.writer(open("csv/%s-%s.csv"% (spider.name,datetime.now().strftime('%d%m%y')), "wb"),
delimiter=',', quoting=csv.QUOTE_MINIMAL)
elif spider.name == 'browser_os':
log.msg("opened spider %s at time %s" % (spider.name,datetime.now().strftime('%H-%M-%S')))
self.brandCategoryCsv = csv.writer(open("csv/%s-%s.csv"% (spider.name,datetime.now().strftime('%d%m%y')), "wb"),
delimiter=',', quoting=csv.QUOTE_MINIMAL)
def process_item(self, item, spider):
self.brandCategoryCsv.writerow([item['year'],
item['internet_explorer'],
item['firefox'],
item['chrome'],
item['safari'],
item['opera'],
])
return item
# For Browser Os
# def process_item(self, item, spider):
# self.brandCategoryCsv.writerow([item['year'],
# item['vista'],
# item['nt'],
# item['winxp'],
# item['linux'],
# item['mac'],
# item['mobile'],
#
#
# ])
# return item
def spider_closed(self, spider):
log.msg("closed spider %s at %s" % (spider.name,datetime.now().strftime('%H-%M-%S')))
work_time = datetime.now() - spider.started_on
print str(work_time),"Total Time taken by the spider to run>>>>>>>>>>>"
如您所见,在上面的代码中,当我使用名称运行蜘蛛时,browser_statistics
它将创建一个具有browser_statistics-date
格式的 csv 文件并将数据从项目写入 csv 文件
但是当我想用 name 运行第二个蜘蛛时browser_os
, process_item 方法不起作用,因为两个蜘蛛都有不同的项目要获取
谁能告诉我
无论如何,是否可以运行多个具有相同 process_item 和不同项目的蜘蛛?