国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Scrapy爬蟲入門教程六

2019-11-06 06:17:31
字體:
來源:轉載
供稿:網友

簡單的Python版本管理:pyenv Scrapy爬蟲入門教程一 Scrapy爬蟲入門教程二 Scrapy爬蟲入門教程三 Scrapy爬蟲入門教程四 Scrapy爬蟲入門教程五

Items聲明項目項目字段使用項目創建項目獲取字段值設置字段值訪問所有填充值其他常見任務從項目創建詞典從短片創建項目擴展項目項目對象字段對象

開發環境: Python 3.6.0 版本 (當前最新) Scrapy 1.3.2 版本 (當前最新)

Items

主要目標是從非結構化來源(通常是網頁)提取結構化數據。Scrapy爬蟲可以將提取的數據作為Python語句返回。雖然方便和熟悉,Python dicts缺乏結構:很容易在字段名稱中輸入錯誤或返回不一致的數據,特別是在與許多爬蟲的大項目。

要定義公共輸出數據格式,Scrapy提供Item類。 Item對象是用于收集所抓取的數據的簡單容器。它們提供了一個類似字典的 API,具有用于聲明其可用字段的方便的語法。

各種Scrapy組件使用項目提供的額外信息:導出器查看聲明的字段以計算要導出的列,序列化可以使用項字段元數據trackref 定制,跟蹤項實例以幫助查找內存泄漏(請參閱使用trackref調試內存泄漏)等。

聲明項目

使用簡單的類定義語法和Field 對象來聲明項目。這里是一個例子:

import scrapyclass 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 productProduct(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 fieldTraceback (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 product2Product(name='Desktop PC', price=1000)>>> product3 = product2.copy()>>> print product3Product(name='Desktop PC', price=1000)

從項目創建詞典:

>>> dict(product) # create a dict from all populated values{'price': 1000, 'name': 'Desktop PC'}

從短片創建項目:

>>> Product({'name': 'Laptop PC', 'price': 1500})Product(price=1500, name='Laptop PC')>>> Product({'name': 'Laptop PC', 'lala': 1500}) # warning: unknown field in dictTraceback (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代碼。單獨的類用于支持 基于類屬性的項聲明語法。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德钦县| 中宁县| 鞍山市| 瑞安市| 柳江县| 咸宁市| 惠州市| 南昌县| 亳州市| 张掖市| 大关县| 花莲县| 剑川县| 洪江市| 桦甸市| 银川市| 河池市| 漳浦县| 隆子县| 溧阳市| 贡嘎县| 固安县| 莲花县| 江陵县| 灵山县| 黔江区| 陇西县| 山阳县| 洪洞县| 达拉特旗| 荔波县| 百色市| 苏州市| 贵南县| 绥德县| 浮梁县| 嵊泗县| 孟连| 杨浦区| 桐柏县| 新化县|