Item

item 是裝載被提取的數據的容器,其結構類似字典。

以下是一個 item 的例子。

import scrapy

class Product(scrapy.Item):
    name = scrapy.Field()
    price = scrapy.Field()
    stock = scrapy.Field()
    last_updated = scrapy.Field(serializer=str)

看一下 item 的用法。

創建 item

>>> from tutorial.items import Product
>>> product = Product(name='Desktop PC', price=1000)

>>> product
{'name': 'Desktop PC', 'price': 1000}

提取 item 中的值

>>> product['name']
Desktop PC
>>> product.get('name')
Desktop PC

>>> product['price']
1000

若提取 item 中不存在的字段,將會報錯,我們可以設定默認值來防止這種錯誤。

# 存在,但未賦值的字段
>>> product['last_updated']
Traceback (most recent call last):
    ...
KeyError: 'last_updated'

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

# 不存在的字段
>>> product['lala'] 
Traceback (most recent call last):
    ...
KeyError: 'lala'

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

判斷 item 是否存在某字段:

>>> 'name' in product
True

# 存在字段,但未賦值
>>> 'last_updated' in product
False

# 存在字段,但未賦值 
>>> 'last_updated' in product.fields
True

# 不存在該字段
>>> 'lala' in product.fields
False

設定 item 中的值

>>> product['last_updated'] = 'today'
>>> product['last_updated']
today

# 設定不存在的字段,報錯
>>> product['lala'] = 'test' 
Traceback (most recent call last):
    ...
KeyError: 'Product does not support field: lala'

查看 item 所有字段

>>> product.keys()
dict_keys(['price', 'last_updated', 'name'])

>>> product.items()
ItemsView({'last_updated': 'today', 'name': 'Desktop PC', 'price': 1000})

復制 item

>>> product2 = Product(product)
>>> product2
{'last_updated': 'today', 'name': 'Desktop PC', 'price': 1000}

>>> product3 = product2.copy()
>>> product3
{'last_updated': 'today', 'name': 'Desktop PC', 'price': 1000}

把 item 轉換為字典

>>> dict(product)
{'price': 1000, 'last_updated': 'today', 'name': 'Desktop PC'}

>>> d = dict(product)
>>> type(d)
<class 'dict'>

通過字典創建 item

>>> p = Product({'name': 'Laptop PC', 'price': 1500})
>>> p
{'name': 'Laptop PC', 'price': 1500}

# 字段包含 item 未定義的字段時,報錯
>>> p = Product({'name': 'Laptop PC', 'lala': 1500})
Traceback (most recent call last):
     ...
KeyError: 'Product does not support field: lala'

item 繼承

繼承 item,并添加新的字段。

class DiscountedProduct(Product):
    discount_percent = scrapy.Field(serializer=str)
    discount_expiration_date = scrapy.Field()

繼承 item ,修改并覆蓋原有字段。

class SpecificProduct(Product):
    name = scrapy.Field(Product.fields['name'], serializer=my_serializer)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容