Scrapy Shell

18.1  Scrapy Shellphp

Scrapy 終端是一個交互終端,咱們能夠在未啓動 spider 的狀況下嘗試及調試代碼,也能夠用來測試 XPath 或 CSS 表達式,查看他們的工做方式,方便咱們爬取的網頁中提取的數據。css

18.2.1 啓動Scrapy Shell

進入項目的根目錄,執行下列命令來啓動 shell 。html

 

執行命令:正則表達式

scrapy shell "http://www.itcast.cn/channel/teacher.shtml"shell

 

Scrapy Shell 根據下載的頁面會自動建立一些方便使用的對象,例如 Response 對象,以及 Selector 對象 (對 HTML及 XML內容)。框架

當 shell 載入後,將獲得一個包含 response 數據的本地 response 變量,輸入 response.body 將輸出 response 的包體,輸出 response.headers 能夠看到 response 的包頭。scrapy

例一:在 in 行輸入 response.body,結果以下:ide

 

例二:在 in 行輸入 response.headers,結果以下:學習

 

輸入 response.selector 時, 將獲取到一個 response 初始化的類 Selector 的對象,此時能夠經過使用 response.selector.xpath() 或 response.selector.css() 來對 response 進行查詢。測試

 

Scrapy 也提供了一些快捷方式, 例如 response.xpath()或response.css()一樣能夠生效。

18.2.2 Selectors選擇器

Scrapy Selectors 內置 XPath 和 CSS Selector 表達式機制。

Selector有四個基本的方法,最經常使用的仍是xpath。

【 xpath() 】: 傳入 xpath 表達式,返回該表達式所對應的全部節點的 selector list 列表。

【 extract()】: 序列化該節點爲 Unicode 字符串並返回 list。

【 css() 】: 傳入 CSS 表達式,返回該表達式所對應的全部節點的 selector list 列表,語法同 BeautifulSoup4 。

【 re() 】: 根據傳入的正則表達式對數據進行提取,返回 Unicode 字符串 list 列表。

 

18.2.3 XPath表達式的例子及對應的含義

XPath 表達式的例子及對應的含義:

/html/head/title: 表示選擇<HTML>文檔中 <head> 標籤內的 <title> 元素。

/html/head/title/text(): 表示選擇上面提到的 <title> 元素的文字。

//td: 表示選擇全部的 <td> 元素。

//div[@class="mine"]: 表示選擇全部具備 class="mine" 屬性的 div 元素。

18.2.4 Selector 在Scrapy Shell 中使用

例如:XX社招的網站:http://hr.tencent.com/position.php?&start=0

第一步:進入項目的根目錄。

 

第二步:scrapy shell 命令啓動。

scrapy shell http://hr.tencent.com/position.php?&start=0

 

第三步:相關的 Selector 使用操做。

# 返回 xpath 選擇器對象列表。

response.xpath('//title')

 

# 使用 extract()方法返回 Unicode 字符串列表。

response.xpath('//title').extract()

 

# 打印列表第一個元素,終端編碼格式顯示。

Print(response.xpath('//title').extract()[0])

<title>職位搜索 | 社會招聘 | Tencent 騰訊招聘</title>

 

# 返回 xpath 選擇器對象列表。

response.xpath('//title/text()')

# 返回列表第一個元素的 Unicode 字符串。

response.xpath('//title/text()')[0].extract()

 

# 按終端編碼格式顯示。

print(response.xpath('//title/text()')[0].extract())

職位搜索 | 社會招聘 | Tencent 騰訊招聘

 

response.xpath('//*[@class="even"]')

 

在使用 Scrapy 爬蟲框架提取數據,首先要明確須要提取數據的字段和在 HTML網頁中的結構。而後在 Scrapy Shell中測試,測試經過後再應用到代碼中

18.2.5 Scrapy Shell 小結

咱們這裏使用 Scrapy Shell 主要是用來調試爬蟲代碼, Scrapy Shell 的做用很強大,這裏只是簡單的介紹了一下,須要更深刻的學習,能夠看官方文檔詳細介紹 Scrapy Shell ,或者相關的書籍。

官方文檔:http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/shell.html

相關文章
相關標籤/搜索