1

私はスクレイピー フレームワークを使用しており、2 つのスパイダー ファイルを作成して 2 つの URL からデータを取得しています。

たとえば、スクレイピングされたデータがspider1ファイルに保存されるように実行すると、2番目に実行するとデータがファイルに保存されます。url1csv1spider2csv2

実際に私がやろうとしているのは、異なるスパイダーからのすべてのデータを異なるシートの単一のcsvファイルに保存することです(シート名はスパイダー名にする必要があります)

All about my question is how to write data in to multiple sheets in a single csv file from python

パイプライン.py

from w3c_browser.items import WCBrowserItem
import csv
from csv import DictWriter
from cStringIO import StringIO
from datetime import datetime
from scrapy.xlib.pydispatch import dispatcher
from scrapy import signals
from scrapy import log

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)
        elif spider.name == 'browser_display':
            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):
        if spider.name == 'browser_statistics':
            self.brandCategoryCsv.writerow([item['year'],
                                            item['internet_explorer'],
                                            item['firefox'],
                                            item['chrome'],
                                            item['safari'],
                                            item['opera'],
            ])
            return item

        elif spider.name == '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>>>>>>>>>>>"
4

1 に答える 1

0

コマンドラインからスクレイピーを使用してこれを行うための気の利いた組み込みの方法があるかどうかはわかりません。しかし、独自のパイプラインを作成するのは非常に簡単です。パイプラインは、すべてのスパイダーに対して同じファイルを開き、異なるスパイダーごとに異なるシートを書き込むことができます。これには、このロジックを自分で実装する必要があります。

于 2012-10-18T13:16:07.370 に答える