Scrapy爬蟲入門教程六 Items(專案)

2021-07-27 23:42:16 字數 4807 閱讀 7825

python版本管理:pyenv和pyenv-virtualenv

scrapy爬蟲入門教程一 安裝和基本使用

scrapy爬蟲入門教程二 官方提供demo

scrapy爬蟲入門教程三 命令列工具介紹和示例

scrapy爬蟲入門教程四 spider(爬蟲)

scrapy爬蟲入門教程五 selectors(選擇器)

scrapy爬蟲入門教程六 items(專案)

scrapy爬蟲入門教程七 item loaders(專案載入器)

scrapy爬蟲入門教程八 互動式 shell 方便除錯

scrapy爬蟲入門教程九 item pipeline(專案管道)

scrapy爬蟲入門教程十 feed exports(匯出檔案)

scrapy爬蟲入門教程十一 request和response(請求和響應)

scrapy爬蟲入門教程十二 link extractors(鏈結提取器)

擴充套件專案

開發環境:

python 3.6.0 版本(當前最新)

scrapy 1.3.2 版本(當前最新)

主要目標是從非結構化**(通常是網頁)提取結構化資料。scrapy爬蟲可以將提取的資料作為python語句返回。雖然方便和熟悉,python dicts缺乏結構:很容易在欄位名稱中輸入錯誤或返回不一致的資料,特別是在與許多爬蟲的大專案。

要定義公共輸出資料格式,scrapy提供item類。 item物件是用於收集所抓取的資料的簡單容器。它們提供了乙個類似字典的 api,具有用於宣告其可用欄位的方便的語法。

各種scrapy元件使用專案提供的額外資訊:匯出器檢視宣告的字段以計算要匯出的列,序列化可以使用項字段元資料trackref 定製,跟蹤項例項以幫助查詢記憶體洩漏(請參閱使用trackref除錯記憶體洩漏)等。

使用簡單的類定義語法和field 物件來宣告專案。這裡是乙個例子:

import scrapy

class

product

(scrapy.item):

name = scrapy.field

() price = scrapy.field

() stock = scrapy.field

() last_updated = scrapy.field

(serializer=str)

注意

熟悉django的人會注意到scrapy items被宣告為類似於django models,只是scrapy items比較簡單,因為沒有不同字段型別的概念。

field物件用於為每個字段指定元資料。例如,last_updated上面示例中所示的字段的序列化函式。

您可以為每個字段指定任何種類的元資料。對field物件接受的值沒有限制。出於同樣的原因,沒有所有可用元資料鍵的參考列表。field物件中定義的每個鍵可以由不同的元件使用,並且只有那些元件知道它。您也可以定義和使用field專案中的任何其他 鍵,為您自己的需要。field物件的主要目標 是提供一種在乙個地方定義所有欄位元資料的方法。通常,那些行為取決於每個欄位的元件使用某些字段鍵來配置該行為。您必須參考他們的文件,以檢視每個元件使用哪些元資料鍵。

重要的是要注意,field用於宣告專案的物件不會被分配為類屬性。相反,可以通過item.fields屬性訪問它們。

下面是使用上面宣告的product專案對專案執行的常見任務的一些示例 。你會注意到api非常類似於dict api。

建立專案

>>> product = product(name='desktop pc', price=1000)

>>>

print product

product(name='desktop pc', price=1000)

獲取字段值
>>> product['name']

desktop pc

>>> product.get('name')

desktop pc

>>> product['price']

1000

>>> product['last_updated']

traceback (most recent call last):

...keyerror: 'last_updated'

>>> product.get('last_updated', 'not set')

not set

>>> product['lala'] # getting unknown field

traceback (most recent call last):

...keyerror: 'lala'

>>> product.get('lala', 'unknown field')

'unknown field'

>>> 'name'

in product # is name field populated?

true

>>> 'last_updated'

in product # is last_updated populated?

false

>>> 'last_updated'

in product.fields # is last_updated a declared field?

true

>>> 'lala'

in product.fields # is lala a declared field?

false

設定字段值
>>> product [ 'last_updated' ]  =  'today' 

>>> product [ 'last_updated' ]

today

>>> product [ 'lala' ] = 'test' #設定未知字段

traceback(最近呼叫最後一次):

...

keyerror:'產品不支援字段:lala'

訪問所有填充值

要訪問所有填充值,只需使用典型的dict api:

>>> product.keys()

['price', 'name']

>>> product.items()

[('price', 1000), ('name', 'desktop pc')]

其他常見任務

複製專案:

>>> product2 = product(product)

>>>

print product2

product(name='desktop pc', price=1000)

>>> product3 = product2.copy()

>>>

print product3

product(name='desktop pc', price=1000)

從專案建立詞典:
>>> dict(product) # create a dict from all populated values

從短片建立專案:
>>> product()

product(price=1500, name='laptop pc')

>>> product() # warning: unknown field in dict

traceback (most recent call last):

...keyerror: 'product does not support field: lala'

您可以通過宣告原始項的子類來擴充套件項(以新增更多字段或更改某些欄位的某些元資料)。

例如:

class

discountedproduct

(product):

discount_percent = scrapy.field

(serializer=str)

discount_expiration_date = scrapy.field

()

class

specificproduct

(product):

name = scrapy.field

(product.fields['name'], serializer=my_serializer)

新增(或替換)欄位的serializer元資料鍵name,保留所有以前存在的元資料值。

專案物件

class scrapy.item.item([arg])

返回乙個可以從給定引數初始化的新專案。

專案複製標準dict api,包括其建構函式。items提供的唯一附加屬性是:

fields

包含字典中的所有宣告的字段為這個專案,不僅是那些填充。鍵是欄位名稱,值是field在專案宣告中使用的 物件。

字段物件

class scrapy.item.field([arg])

field類只是乙個別名內建字典類和不提供任何額外的功能或屬性。換句話說,field物件是普通的python**。單獨的類用於支援 基於類屬性的項宣告語法。

網路爬蟲框架 Scrapy 入門教程

scrapy 是乙個用 python 開發的爬蟲框架,用於抓取 web 頁面並提取其中的結構化資料。安裝 首先,確定你的電腦上已經安裝了 python 3 以及對應的 pip。可以使用下面的命令檢視 python3 version python 3.6.3 pip3 version pip 9.0....

Scrapy爬蟲入門教程二 官方提供Demo

python版本管理 pyenv和pyenv virtualenv scrapy爬蟲入門教程一 安裝和基本使用 scrapy爬蟲入門教程二 官方提供demo scrapy爬蟲入門教程三 命令列工具介紹和示例 scrapy爬蟲入門教程四 spider 爬蟲 scrapy爬蟲入門教程五 selector...

python爬蟲入門教程

前言 在爬蟲系列文章 優雅的http庫requests 中介紹了 requests 的使用方式,這一次我們用 requests 構建乙個知乎 api,功能包括 私信傳送 文章點讚 使用者關注等,因為任何涉及使用者操作的功能都需要登入後才操作,所以在閱讀這篇文章前建議先了解python模擬知乎登入 現...