python scrapy中管道文件中有多个process_item方法

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\

我正在研究scrapy,我在一个scrapy项目中创建了两个具有两个不同URL的spider文件

两个蜘蛛在单独运行时摩擦得很好。实际上,问题是每个url都有不同的项要获取,因此在
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