初識 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章