2015-10-14 57 views
5

我有Scrapy(版本1.0.3)蜘蛛,其中我從網頁中提取一些數據,我也下載文件,像這樣(簡化):當保存抓取的項目和文件時,Scrapy在輸出csv文件中插入空行

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 

在pipelines.py我只是重寫FilePipeline更改文件的名稱:在items.py

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() 

settings.py中我有:

ITEM_PIPELINES = { 
    'myscraping.pipelines.CustomFilesPipeline': 100 
} 

現在在輸出CSV文件中我得到的是這樣的:

title1 
title2 
, 
, 
title3 
etc. 

看起來是空行(只具有逗號)代表下載的文件,我想知道或得到如何防止這些行在輸出csv文件中的建議。 (文件保存到文件夾中)。
在Scrapy設置中我找到了關於FEED_STORE_EMPTY(默認爲false,即不應該導出空的提要),但這與我猜測的文件無關。
我有感覺,這必須做一些管道,但我無法弄清楚如何做到這一點。
任何幫助,將不勝感激

+2

你爲什麼不把file_urls在您的項目MyItem(),並且只產生一種產品呢? – 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