我成功地尝试从命令行将我的项目导出到 csv 文件中,例如:
scrapy crawl spiderName -o filename.csv
我的问题是:在代码中执行相同操作的最简单解决方案是什么?我需要这个,因为我从另一个文件中提取文件名。结束场景应该是,我称之为
scrapy crawl spiderName
并将项目写入 filename.csv
我成功地尝试从命令行将我的项目导出到 csv 文件中,例如:
scrapy crawl spiderName -o filename.csv
我的问题是:在代码中执行相同操作的最简单解决方案是什么?我需要这个,因为我从另一个文件中提取文件名。结束场景应该是,我称之为
scrapy crawl spiderName
并将项目写入 filename.csv
为什么不使用项目管道?
WriteToCsv.py
import csv
from YOUR_PROJECT_NAME_HERE import settings
def write_to_csv(item):
writer = csv.writer(open(settings.csv_file_path, 'a'), lineterminator='\n')
writer.writerow([item[key] for key in item.keys()])
class WriteToCsv(object):
def process_item(self, item, spider):
write_to_csv(item)
return item
设置.py
ITEM_PIPELINES = { 'project.pipelines_path.WriteToCsv.WriteToCsv' : A_NUMBER_HIGHER_THAN_ALL_OTHER_PIPELINES}
csv_file_path = PATH_TO_CSV
如果您希望将项目写入单独的 csv 以用于单独的蜘蛛,您可以为您的蜘蛛提供一个 CSV_PATH 字段。然后在您的管道中使用您的蜘蛛字段而不是来自 setttigs 的路径。
这有效,我在我的项目中对其进行了测试。
高温高压
这就是 Feed 导出的用途: http ://doc.scrapy.org/en/latest/topics/feed-exports.html
实施爬虫时最常用的功能之一是能够正确存储爬取的数据,这通常意味着生成一个“导出文件”,其中包含爬取的数据(通常称为“导出提要”)以供其他系统使用.
Scrapy 通过 Feed Exports 提供了开箱即用的此功能,它允许您使用多种序列化格式和存储后端生成带有抓取项目的 Feed。
有一种使用“FEEDS”将文件保存在scrapy中的更新方法
class mySpider(scrapy.Spider):
name = "myProject"
custom_settings = {
"FEEDS":{"fileName.csv":{"format":"csv"}},
}
最新的答案是:
使用内置导出器。您可以将文件名设置为键。配置可能如下所示:
filename = 'export'
class mySpider(scrapy.Spider):
custom_settings = {
'FEEDS': {
f'{filename}.csv': {
'format': 'csv',
'overwrite': True
}
}
}
文档: https ://docs.scrapy.org/en/latest/topics/feed-exports.html#std-setting-FEEDS