python scrapy中管道文件中有多个process_item方法
我正在研究scrapy,我在一个scrapy项目中创建了两个具有两个不同URL的spider文件 两个蜘蛛在单独运行时摩擦得很好。实际上,问题是每个url都有不同的项要获取,因此在python scrapy中管道文件中有多个process_item方法,python,scrapy,pipeline,Python,Scrapy,Pipeline,我正在研究scrapy,我在一个scrapy项目中创建了两个具有两个不同URL的spider文件 两个蜘蛛在单独运行时摩擦得很好。实际上,问题是每个url都有不同的项要获取,因此在items.py文件中声明了所有项。 在这里,在抓取之后,我将数据存储到以spider名称动态创建的csv文件中 因此,例如,当我需要运行spider1时,我需要声明单独的process\u item方法,因为两个spider的项都不同,当我需要运行第二个spider时,我需要通过注释其他方法编写另一个process\
items.py
文件中声明了所有项。
在这里,在抓取之后,我将数据存储到以spider名称动态创建的csv文件中
因此,例如,当我需要运行spider1
时,我需要声明单独的process\u item
方法,因为两个spider的项都不同,当我需要运行第二个spider时,我需要通过注释其他方法编写另一个process\u item
。
在scrapy中是否有任何方法可以使用两个过程\项方法?下面是我的pipeline.py
code
pipeline.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\u statistics
的爬行器时,它将创建一个csv文件,格式为browser\u statistics-date
并将项目中的数据写入csv文件
但是当我想运行名为browser\u os
的第二个爬行器时,process\u item方法不起作用,因为两个爬行器都有不同的项要获取
有人能告诉我吗
是否可以使用同一个进程项目和不同的项目运行多个spider?最好的选择是您可以根据进程项目中的spider名称使用 像
def process_item(self, item, spider):
if 'spider1' in spider.name:
#TODO write CSV for spider1
else:
#Should be a spider2
#TODO write CSV for spider2
return item