自动格式化输出文件
- scrapy支持的格式化输出文件格式
- json
- jsonlines
- csv
- xml
- 通过配置setting中属性,来定义存储方式
- FEED_URI 存储路径,必须配置,如果不配置,需要在启动时候指定路径
- 示例:file://tmp/export.csv
- 备注:
- 路径的名称可以格式化,例如:
- FEED_FORMAT 用于序列化输出的文件格式,就是上面的几种
- FEED_EXPORT_ENCODING 文件编码格式,一般默认utf-8,json默认是安全编码格式
- FEED_EXPORT_FIELDS 定义输出文件中包含的字段,为列表格式
- FEED_EXPORT_INDENT 定义输出内容的缩进,默认为0,
- 0和负数表示内容会放在一行上
- None会选择最紧凑的方式,将数据进行摆放
- 其他,将会按照指定的缩进,对对象的成员进行格式化显示
- FEED_STORE_EMPTY 如果没输出是否会导出文件,默认为False
- FEED_STORAGES_BASE 字典类型,包含所有支持存储方式模板引擎, 一般不需要手动配置
- 默认为
- FEED_STORAGES 一个字典类型,可以手动添加存储方式的模板引擎
- 默认为 { }
- 如果想要禁用某一个模板文件类型的引擎,可以将上面对应字段值设置为None
- FEED_EXPORTERS_BASE 字典类型,包含了所有支持的格式文件处理引擎, 一般不需要手动配置
- 默认为
- FEED_EXPORTERS 一个字典类型,可以手动添加文件处理引擎
- 默认为{ }
- 如果想要禁用某一个模板文件类型的引擎,可以将上面对应字段值设置为None
scrapy手动输出指定csv格式文件
- 目标:
- 获取如下格式的csv文件
- 配置的步骤
- 1. 在scrapy的spiders同层目录,新建my_project_csv_item_exporter.py文件内容如下(文件名可改,目录定死)
from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter
class MyProjectCsvItemExporter(CsvItemExporter):
def __init__(self, *args, **kwargs):
delimiter = settings.get('CSV_DELIMITER', ',')
kwargs['delimiter'] = delimiter
fields_to_export = settings.get('FIELDS_TO_EXPORT', [])
if fields_to_export :
kwargs['fields_to_export'] = fields_to_export
super(MyProjectCsvItemExporter, self).__init__(*args, **kwargs)
- 2. 在同层目录,settings.py文件新增如下内容(指定item,field顺序)
FEED_EXPORTERS = {
'csv': 'my_project.my_project_csv_item_exporter.MyProjectCsvItemExporter',
} #这里假设你的project名字为my_project
FIELDS_TO_EXPORT = [
'id',
'name',
'email',
'address'
- 3. 在同层目录,settings.py文件指定分隔符
- CSV_DELIMITER = "\t"
- 4.启动项目
- 全部设定完后,执行scrapy crawl spider -o spider.csv的时候,字段就按顺序来了。