保存抓取的项目和文件时,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,即它不应该导出空提要)但这与我猜的文件无关。
我觉得这必须对管道做些什么,但我不知道该怎么做。
任何帮助将不胜感激
我把答案贴在这里:
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
我有 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,即它不应该导出空提要)但这与我猜的文件无关。
我觉得这必须对管道做些什么,但我不知道该怎么做。
任何帮助将不胜感激
我把答案贴在这里:
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