初识 Scrapy - Feed导出

1. 前言

在实现scraper时,常需要的功能之一是能够正确地存储被抓取的数据,这意味着用被抓取的数据(通常称为“导出提要”)生成一个“导出文件”,供其他系统使用。

Scrapy通过Feed导出提供了这样一个开箱即用的功能。允许你根据抓取的items使用多种序列化格式和存储后端生成feeds。

2. 序列化格式

为了序列化抓取到的数据,feed导出需要使用Item exporters。开箱即用地支持如下几种格式:

  • JSON。
  • JSON lines。
  • CSV。
  • XML。

当然,也可以通过FEED_EXPORTERS设置自己想要的格式。

2.1 JSON

  • FEEDs设置中的format键的值为:json
  • 使用的Exporter:JsonItemExporter
  • feed较大时使用JSON lines更好。

2.2 JSON lines

  • FEEDs设置中的format键的值为:jsonlines
  • 使用的Exporter:JsonLinesItemExporter

2.3 CSV

  • FEEDs设置中的format键的值为:csv
  • 使用的Exporter:CsvItemExporter
  • 使用FEED_EXPORT_FIELDS指明要导出的列和列的顺序。CSV必设此项,因为它根其它格式不太一样,它的列头是固定的。

2.4 XML

  • FEEDs设置中的format键的值为:xml
  • 使用的Exporter:XmlItemExporter

2.5 Pickle

  • FEEDs设置中的format键的值为:pickle
  • 使用的Exporter:PickleItemExporter

2.6 Marshal

  • FEEDs设置中的format键的值为:marshal
  • 使用的Exporter:MarshalItemExporter

3. 存储

当你要使用feed导出时,你可以在FEEDS设置中定义一个或多个URI。feed导出支持多种存储后端类型,都通过URI来定义。

开箱即用地支持如下几种:

  • 本地文件系统(Local filesystem)
  • FTP
  • S3(需要 botocore)
  • 标准输出(Standard output)

如果所需的外部库不可用,则某些存储后端可能不可用。例如,只有在 botocore 库已安装情况下,S3后端才可用。

3.1 存储的URI参数

在URI中可以有很多参数。

  • %(time)%。创建feed的时间戳。
  • %(name)%。spider的name。
    也可将sider的其他属性作为URI的参数。当feed创建时,URI中的参数会被实际的值替换。

例子,

  • 存储在FTP中( 每一个spider一个目录)。ftp://user:[email protected]/scraping/feeds/%(name)s/%(time)s.json
  • 存储在S3中( 每一个spider一个目录)。s3://mybucket/scraping/feeds/%(name)s/%(time)s.json

3.2 本地文件系统

feed存储在本地文件系统。

  • URI语法:file
  • URI示例:file:///tmp/export.csv
  • 是否需要额外的库:否

请注意,对于本地文件系统存储,如果指定了/tmp/export.csv之类的绝对路径,则可以省略该方案。 不过,这仅适用于Unix系统。

3.3 FTP

feed存储在FTP服务器。

  • URI语法:ftp
  • URI示例:ftp://user:pass#ftp.example.com/path/to/export.csv
  • 是否需要额外的库:否
    FTP支持两种连接模式:主动和被动。Scrapy默认使用被动连接模式。将FEED+STORAGE_FTP_ACTIVE设为True,则使用主动连接模式。

3.4 S3

feed存储在Amazon S3。

  • URI语法:s3
  • URI示例:
    • s3://mybucket/path/to/export.csv
    • s3://aws_key:aws_secret@mybucket/path/to/export.csv。需要设置AWS证书。
  • 是否需要额外的库:botocore。

3.5 标准输出

feed被写入Scrapy进程的标准输出。

4. 设置

详情见 Scrapy官方文档 - Feed exports

5. 参考文献

[1] Scrapy官方文档 - Feed exports

猜你喜欢

转载自blog.csdn.net/besmarterbestronger/article/details/107097091