爬蟲代理 Scrapy 框架詳細介紹 2

Laical發表於2020-06-04

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 協議》,轉載必須註明作者和本文連結

相關文章