2015-10-14 6 views
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です。つまり、空のフィードをエクスポートしないでください)が見つかりましたが、これは私が推測するファイルには関係ありません。
これはパイプラインで何かをしなければならないと感じていますが、どうやってそれを行うのか分かりません。
任意のヘルプは

+2

あなたがあなたの項目MYITEM(中file_urlsを入れない理由)、そして唯一のアイテムの種類をもたらしますか? – vianney

+0

素晴らしい!私はそれを考えなかった(何とかドキュメンテーションで見落とされている):)ありがとう – zdenulo

答えて

0

をいただければ幸い私はここで答えを貼り付けます。

 
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...') 
    my_item['file_urls'] = [file_url] 
    yield my_item 
関連する問題