1
私はscraped URLのリストからscraped urlごとにcsvファイルを生成しようとしています。私はpipeline.pyを変更することを理解していますが、私の試みは今まで失敗しています。どのように私はパイプラインに掻き取られているURLを渡すことができ、出力の名前としてこれを使用し、それに応じて出力を分割するのか分かりません。治療のURLリストから出力を分割する方法
助けが必要ですか?ここで
おかげ
クモやパイプライン
from scrapy import Spider
from scrapy.selector import Selector
from vApp.items import fItem
class VappSpider(Spider):
name = "vApp"
allowed_domains = ["google.co.uk"]
start_urls = [l.strip() for l in open('data/listOfUrls.txt').readlines()]
def parse(self, response):
trs = Selector(response).xpath('//[@id="incdiv"]/table/tbody/tr')
for tr in trs:
item = fItem()
try:
item['item'] = tr.xpath('td/text()').extract()[0]
except IndexError:
item['item'] = 'null'
yield item
パイプライン:
from scrapy import signals
from scrapy.contrib.exporter import CsvItemExporter
class VappPipeline(object):
def __init__(self):
self.files = {}
@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):
file = open('results/%s.csv' % spider.name, 'w+b')
self.files[spider] = file
self.exporter = CsvItemExporter(file)
self.exporter.fields_to_export = ['item']
self.exporter.start_exporting()
def spider_closed(self, spider):
self.exporter.finish_exporting()
file = self.files.pop(spider)
file.close()
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
ありがとう@neverlastn。私はあなたのソリューションを試しましたが、私にエラーを失ってしまっています。私はあなたが正しいと思います。クロール後にデータを後処理する必要があります。特に、行ごとのデータがオーダー方法ではなくエクスポートされていることが分かった後に。スクレイプされたテーブルの各行は整然と掻かれていないようですが、クローラが別のURLをクロールした後で、他のアドレスからの行がエクスポートされます。だから基本的に私のテーブルは、row1url1、row1url2、row2url1、row2url1のように見える... – gcc