5
私はScrapy(バージョン1.0.3)スパイダーを持っています。私が持っているitems.pyでスクラップしたアイテムとファイルを保存すると、Scrapyは出力のCSVファイルに空の行を挿入します
from scrapy.pipelines.files import FilesPipeline
class CustomFilesPipeline(FilesPipeline):
def file_path(self, request, response=None, info=None):
filename = format_filename(request.url)
return filename
:
class MyItem(scrapy.Item):
title = scrapy.Field()
class FileItem(scrapy.Item):
file_urls = scrapy.Field()
files = scrapy.Field()
私は、ファイルの名前を変更するにはFilePipelineをオーバーライドしpipelines.pyで
def extract_data(self, response):
title = response.xpath('//html/head/title/text()').extract()[0].strip()
my_item = MyItem()
my_item['title'] = title
file_url = response.xpath('...get url of file...')
file_urls = [file_url] # here there can be more urls, so I'm storing like a list
fi = FileItem()
fi['file_urls'] = file_urls
yield my_item
yield fi
私が持っているsettings.pyで
:
出力csvファイルで今ITEM_PIPELINES = {
'myscraping.pipelines.CustomFilesPipeline': 100
}
私はこのような何かを得る:(ちょうどカンマを持つ)は、空行がダウンロードしたファイルおよびIを表しているように見えます
title1
title2
,
,
title3
etc.
をそのような行が出力csvファイルに含まれないようにする方法を知りたい、あるいは助言を受けたいと思っています。 (ファイルはフォルダに保存されます)。
Scrapyの設定でFEED_STORE_EMPTY(デフォルトではfalseです。つまり、空のフィードをエクスポートしないでください)が見つかりましたが、これは私が推測するファイルには関係ありません。
これはパイプラインで何かをしなければならないと感じていますが、どうやってそれを行うのか分かりません。
任意のヘルプは
あなたがあなたの項目MYITEM(中file_urlsを入れない理由)、そして唯一のアイテムの種類をもたらしますか? – vianney
素晴らしい!私はそれを考えなかった(何とかドキュメンテーションで見落とされている):)ありがとう – zdenulo