Scrapy終端是一個互動終端,我們可以在未啟動spider的情況下嘗試及除錯程式碼,也可以用來測試XPath或CSS表示式,檢視他們的工作方式,方便我們爬取的網頁中提取的資料。
如果安裝了 IPython ,Scrapy終端將使用 IPython (替代標準Python終端)。 IPython 終端與其他相比更為強大,提供智慧的自動補全,高亮輸出,及其他特性。(推薦安裝IPython)
啟動Scrapy Shell
進入專案的根目錄,執行下列命令來啟動shell:
scrapy shell “http://www.itcast.cn/channel/teacher.shtml"
圖片描述
Scrapy Shell根據下載的頁面會自動建立一些方便使用的物件,例如 Response 物件,以及 Selector 物件 (對HTML及XML內容)。
- 當shell載入後,將得到一個包含response資料的本地 response 變數,輸入
response.body
將輸出response的包體,輸出response.headers
可以看到response的包頭。 - 輸入
response.selector
時, 將獲取到一個response 初始化的類 Selector 的物件,此時可以通過使用response.selector.xpath()
或response.selector.css()
來對 response 進行查詢。 - Scrapy也提供了一些快捷方式, 例如
response.xpath()
或response.css()
同樣可以生效(如之前的案例)。
Selectors選擇器
Scrapy Selectors 內建 XPath 和 CSS Selector 表示式機制
Selector有四個基本的方法,最常用的還是xpath:
- xpath(): 傳入xpath表示式,返回該表示式所對應的所有節點的selector list列表
- extract(): 序列化該節點為Unicode字串並返回list
- css(): 傳入CSS表示式,返回該表示式所對應的所有節點的selector list列表,語法同 BeautifulSoup4
- re(): 根據傳入的正規表示式對資料進行提取,返回Unicode字串list列表
XPath表示式的例子及對應的含義:
/html/head/title: 選擇文件中
標籤內的 元素 /html/head/title/text(): 選擇上面提到的 元素的文字 //td: 選擇所有的 元素 //div[@class=”mine”]: 選擇所有具有 class=”mine” 屬性的 div 元素
嘗試Selector
我們用騰訊社招的網站http://hr.tencent.com/positio…舉例:
以後做資料提取的時候,可以把現在Scrapy Shell中測試,測試通過後再應用到程式碼中。
當然Scrapy Shell作用不僅僅如此,但是不屬於我們課程重點,不做詳細介紹。
官方文件:[http://scrapy-chs.readthedocs…
當Item在Spider中被收集之後,它將會被傳遞到Item Pipeline,這些Item Pipeline元件按定義的順序處理Item。
每個Item Pipeline都是實現了簡單方法的Python類,比如決定此Item是丟棄而儲存。以下是item pipeline的一些典型應用:
- 驗證爬取的資料(檢查item包含某些欄位,比如說name欄位)
- 查重(並丟棄)
- 將爬取結果儲存到檔案或者資料庫中
編寫item pipeline
編寫item pipeline很簡單,item pipiline元件是一個獨立的Python類,其中process_item()方法必須實現:
import something class SomethingPipeline(object): def init(self): # 可選實現,做引數初始化等 # doing something def process_item(self, item, spider): # item (Item 物件) – 被爬取的item # spider (Spider 物件) – 爬取該item的spider # 這個方法必須實現,每個item pipeline元件都需要呼叫該方法, # 這個方法必須返回一個 Item 物件,被丟棄的item將不會被之後的pipeline元件所處理。 return item def open_spider(self, spider): # spider (Spider 物件) – 被開啟的spider # 可選實現,當spider被開啟時,這個方法被呼叫。 def close_spider(self, spider): # spider (Spider 物件) – 被關閉的spider # 可選實現,當spider被關閉時,這個方法被呼叫
啟用一個Item Pipeline元件
為了啟用Item Pipeline元件,必須將它的類新增到 settings.py檔案ITEM_PIPELINES 配置,就像下面這個例子:
分配給每個類的整型值,確定了他們執行的順序,item按數字從低到高的順序,通過pipeline,通常將這些數字定義在0-1000範圍內(0-1000隨意設定,數值越低,元件的優先順序越高)
重新啟動爬蟲
將parse()方法改為入門簡介中最後思考中的程式碼,然後執行下面的命令:
scrapy crawl itcast
檢視當前目錄是否生成teacher.json
本作品採用《CC 協議》,轉載必須註明作者和本文連結