簡體   English   中英

保存已刪除的項目和文件時,Scrapy會在輸出csv文件中插入空行

[英]When saving scraped item and file, Scrapy inserts empty lines in output csv file

我有Scrapy(版本1.0.3)蜘蛛,其中我從網頁中提取了一些數據,我也下載了文件,像這樣(簡化):

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來更改文件的名稱:

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

在items.py我有:

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,即它不應導出空的feed),但這與我猜的文件無關。
我覺得這必須與管道有關,但我無法弄清楚如何做到這一點。
任何幫助,將不勝感激

我在這里粘貼答案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM