Scrapy學習過程之四:Feed Export

參考:https://docs.scrapy.org/en/latest/topics/feed-exports.html#topics-feed-exports

整體架構圖:

Scrapy architecture

SPIDER提取出的數據是dict,從上圖可以看出,會將這些數據發送給ENGINE,然後ENGINE再將數據交給ITEM PIPELINES。

Serialization formats

Scrapy提供了幾種內置的方法,能將dict轉換成常見的數據格式,開箱即用。

  • JSON
  • JSON Line
  • CSV
  • XML

以上是Scrapy內置的序列化dict的方法,開發者也可以通過設置FEED_EXPORTERS進行自定義擴展,稍後展開,這個東西就是設置一個開發者自己實現的一個EXPORTER。

Storages

格式轉換有了,接下來就是把轉換好的數據存放在什麼地方的問題。Scrapy通過設置一個URI指定,參數是FEED_URL,稍後展開。

Scrapy支持的內置存儲後端類型:

  • Local Filesystem
  • FTP
  • S3
  • Standard Output

有些存儲後端需要另外安裝依賴包,如S3需要安裝botocore與boto。

Storage URI parameters

設置存儲後端的URI可以包含可替換點位符,當真正寫數據時會發生替換:

  • (%time)s:用時間戳替換
  • (%name)s:用SPIDER的name屬性替換

除了以上兩個外,還可以在URI中指定SPIDER類的屬性名,運行時則用此屬性的值替換。如:

(%site_id)s:運行時會被SPIDER中的屬性site_id的值替換。

很明顯的是可以在SPIDER中操作屬性的變化,進而控制數據最終輸出到那個URI中。

示例:

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

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

Storage backends

本地文件系統很簡單,指定一個指向本地的URI就可以,最多加上前邊介紹的參數,如:

file:///tmp/export.csv  這個是windows,或者:

/tmp/export.csv    這個是unix。

S3沒用過。

標準輸出設置成stdout:就行了。

Settings

涉及到的配置項:

FEED_URI

Default: None

就是前邊說的URI,必需設置。

FEED_FORMAT

前邊說的四種格式之一。

FEED_EXPORT_ENCODING

Default: None

採用的字符集

FEED_EXPORT_FIELDS

Default: None

對SPIDER抓取到的dict數據進行過濾與字段排序。

FEED_EXPORT_INDENT

Default: 0

JSON與XML格式中的縮進

FEED_STORE_EMPTY

Default: False

是否展出空數據

FEED_STORAGES

Default: {}

用戶自定義的後端存儲驅動。

FEED_STORAGE_FTP_ACTIVE

Default: False

FTP的兩種模式。

FEED_STORAGE_S3_ACL

Default: '' (empty string)

與S3有關。

FEED_STORAGES_BASE

Default:

{
    '': 'scrapy.extensions.feedexport.FileFeedStorage',
    'file': 'scrapy.extensions.feedexport.FileFeedStorage',
    'stdout': 'scrapy.extensions.feedexport.StdoutFeedStorage',
    's3': 'scrapy.extensions.feedexport.S3FeedStorage',
    'ftp': 'scrapy.extensions.feedexport.FTPFeedStorage',
}
這些應該是各種後端存儲的驅動,把後邊的值設定成None就禁用,例如:

FEED_STORAGES = { 'ftp': None, }

在setting.py中設定,禁用的話可能會提高程序的運行效率。

FEED_EXPORTERS

Default: {}

應該是用戶自定義的EXPORTERS,自已實現數據轉換。

FEED_EXPORTERS_BASE

Default:

{
    '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',
}

Scrapy支持的EXPORTERS,可以禁用,如:

FEED_EXPORTERS = {
    'csv': None,
}

 

 

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