Python爬虫笔记(十二)——Scrapy官方文档阅读——Feed exports

Feed exports用于处理数据的存储

Scrapy提供了开箱即用的数据存储格式:

JSON

  • 使用的Feed_exports:JsonItemExporter

JSON lines

  • 使用Feed_exports: JsonLinesItemExporter

CSV

  • 使用Feed_exports: CsvItemExporter

XML

  • 使用Feed_exports: XmlItemExporter

通过设置,Scrapy可以自动将数据存储为对应格式,如果存储CSV,需要在FEED_EXPORT_FIELDS中指定存储列的顺序

Feed exports支持某些存储位置开箱即用(即可以直接使用,不需要我们进行转换),存储位置通过在FEED_URI设置中指明(格式为URI)这些存储位置包括:

本地的文件系统

  • URI前缀:file
  • 举例:file:///tmp/export.csv

FTP

S3,文件存储在Amazon S3

  • URI前缀:s3
  • 举例:s3://mybucket/path/to/export.csv
  • 依赖于botocore库(python2、3)或是boto(python 2)
  • AWS验证的用户名和密码可以在URI中指明,或是通过设置AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY

标准输出,数据输出到控制台

  • URI前缀:stdout
  • 举例:stdout:

存储位置的URI支持使用占位符,当Feed Exports被创建时,相应的占位符将会被解析:

%(time)s—替换为Feed Exports创建时的时间

%(name)s—替换为spider的名字

任何其他命名参数都会被相同名称的spider属性替换掉,例如:%(site_id)s将会被替换为spider类的site_id属性的置

存储位置URI举例:

存储在FTP:

ftp://user:[email protected]/scraping/feeds/%(name)s/%(time)s.json

存储在S3:

s3://mybucket/scraping/feeds/%(name)s/%(time)s.json

feed exports的设置参数:

FEED_URI:export feed数据存储位置的URI

FEED_FORMAT:数据存储的格式

FEED_EXPORT_ENCODING:数据的编码方式,如果不指定,默认为utf-8

FEED_EXPORT_FIELDS:使用FEED_EXPORT_FIELDS选项定义要导出的字段及其顺序,例如:FEED_EXPORT_FIELDS = ["foo", "bar", "baz"],当FEED_EXPORT_FIELDS为空,Scrapy使用Item或是dicts中定义的字段(文档讲解也不清楚,网上博客也是互抄,这个等以后验证,初步理解是导出全部)

FEED_EXPORT_INDENT:默认值为0,若为正数,每行元素在输出前,会先输出对应的空格数,如果为0或是负数,每一个item都会输出到新的一行,目前只有jsonitemexports和xmlitemexports实现

FEED_STORE_EMPTY:默认值为false,不保存任何item

FEED_STORAGES:默认值为{},项目用于保存数据到指定位置所使用的类,是一个字典,关键字为URI,值为类的全限定名

FEED_STORAGES_BASE:默认为:

{
    '': 'scrapy.extensions.feedexport.FileFeedStorage',
    'file': 'scrapy.extensions.feedexport.FileFeedStorage',
    'stdout': 'scrapy.extensions.feedexport.StdoutFeedStorage',
    's3': 'scrapy.extensions.feedexport.S3FeedStorage',
    'ftp': 'scrapy.extensions.feedexport.FTPFeedStorage',
}

Scrapy用于把数据保存到存储位置所使用的类,通过将FEED_STORAGES对应的URI的值设置为None,可以在自己的项目中禁止使用对应的类存储数据到指定位置,如果我们想禁止数据存储到某个存储位置,可以settings.py中设置下列值:

FEED_STORAGES = {
    'ftp': None,
}

FEED_EXPORTERS:默认值为{},项目用于序列化数据成存储格式所使用的类

FEED_EXPORTERS_BASE:默认值:

{
    'json': 'scrapy.exporters.JsonItemExporter',
    'jsonlines': 'scrapy.exporters.JsonLinesItemExporter',
    'jl': 'scrapy.exporters.JsonLinesItemExporter',
    'csv': 'scrapy.exporters.CsvItemExporter',
    'xml': 'scrapy.exporters.XmlItemExporter',
    'marshal': 'scrapy.exporters.MarshalItemExporter',
    'pickle': 'scrapy.exporters.PickleItemExporter',
}

通过将FEED_EXPORTERS对应的序列化格式的值设置为None,可以在自己的项目中禁止使用对应的类存储数据到指定位置,如果我们想禁止使用某种序列化格式,可以settings.py中设置下列值:

FEED_EXPORTERS = {
    'csv': None,
}

以上是我自己理解的情况,因为没有做代码实验,所以可能会有错误,在后期做完代码实验后会更改错误的部分,红字为不确定的部分

猜你喜欢

转载自blog.csdn.net/dhaiuda/article/details/81535861