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...