Scrapy中的Item與ItemLoader物件

2021-09-28 00:10:05 字數 2041 閱讀 7231

scrapy之item與itemload

item物件是種簡單的容器,類似於python的字典,用於儲存處理爬取到的內容,item的用法與字典基本一致,所以可以把item當做字典來操作

item宣告在scrapy專案的items.py中,通過class和field物件來宣告

import scrapy

#item宣告和django models比較類似,不過只有field一種字段,比django簡單

class itemtest(scrapy.item):

name = scrapy.field()

price = scrapy.field()

stock = scrapy.field()

item是爬取到資料的容器,我們可以用parse下的**將資料存入item

from firstspider.items import itemtest  #引用item

def parse_artical_text(self,response):

pass

item = itemtest()

name = response.css('.grid-8 .entry-header h1::text')[0].extract()

price= response.css('.grid-8 .entry-meta p::text')[0].extract().strip().replace('·','').strip()

stock = response.css('.grid-8 .entry-meta p a::text')[0].extract().strip()

item['name'] = name

item['price] = price

item['stock] = stock

yield item

就是在parse下的方法裡先提取資料在安裝字典的方式依次寫入item

只用item在字段過多的時候會顯得**量特別龐大,而且後期不好修改

from scrapy.loader import itemloader

item_loader = itemloader(item=itemtest,response=response)

item_loader.add_css('title','.grid-8 .entry-header h1::text')

item_loader.add_xpath('title','//id[@href ="sd"]')

item_loader.add_value('url',response.url)

item_loader.add_value('title',response.title)

使用itemloader可以使**更簡介,提取規則更容易維護,甚至可以從資料庫裡取到提取規則用於itemloader,更方便與後期的修改

from scrapy.loader.processors import mapcompose,takefirst

def filed_extract(value): #這裡處理我們的接受到的資料,以及自定義資料

return value+".html"

class test(scrapy.item):

title = scrapy.field(

input_process = mapcompose(file_extract),

output_process = takefirst()

)

item loader在每個(item)欄位中都包含了乙個輸入處理器和乙個輸出處理器。 輸入處理器收到資料時立刻提取資料 (通過 add_xpath(), add_css() 或者 add_value() 方法) 之後輸入處理器的結果被收集起來並且儲存在itemloader內. 收集到所有的資料後, 呼叫 itemloader.load_item() 方法來填充,並得到填充後的 item 物件. 這是當輸出處理器被和之前收集到的資料(和用輸入處理器處理的)被呼叫.輸出處理器的結果是被分配到item的最終值

Scrapy中的item是什麼

這兩天看scrapy,看到item這個東西,覺得有點抽象,查了一下,有點明白了。item 是儲存爬取到的資料的容器 其使用方法和python字典類似,並且提供了額外保護機制來避免拼寫錯誤導致的未定義字段錯誤。爬取的主要目標就是從非結構性的資料來源提取結構性資料,例如網頁。scrapy提供 item ...

Scrapy中的item是什麼

這兩天看scrapy,看到item這個東西,覺得有點抽象,查了一下,有點明白了。item 是儲存爬取到的資料的容器 其使用方法和python字典類似,並且提供了額外保護機制來避免拼寫錯誤導致的未定義字段錯誤。爬取的主要目標就是從非結構性的資料來源提取結構性資料,例如網頁。scrapy提供 item ...

Scrapy中將item欄位轉為簡體or繁體

1.安裝hanziconv 安裝乙個簡繁體轉換的包 pip install hanziconv 2.自定義乙個itempiples 找到專案中的pipelines.py檔案 新增自定義的pipeline from hanziconv import hanziconv class hanziconvp...