本篇詳細介紹 scrapy shell 的使用,也介紹了使用 xpath 進行精確查詢
Python爬蟲教程-33-scrapy shell 的使用
- scrapy shell 的使用
- 條件:我們需要先在環境中,安裝 scrapy 包,如果還沒有安裝,請參照:Python爬蟲教程-30-Scrapy 爬蟲框架介紹
- 為什麼要使用 scrapy shell?
- 當我們需要爬取智聯招聘,某一個崗位的資訊的時候,如果我們當然不能簡單的把整個頁面的 HTML 都作為返回的結果吧,這時候我們需要提取資料,我們可以使用正則,但是呢使用正則由很容易出問題,也就需要我們不斷地去除錯,如果說對於一個較大的 Scrapy 專案去測試正則的結果是否正確,就過於麻煩了,這時候,我們要使用 scrapy shell 去除錯,測試成功後,在拷貝到我們的專案中就可以了
- 怎麼開啟 scrapy shell?
- 1.開啟【cmd】
- 2.進入需要的 Anaconda 環境
- 例如:
我的環境名為:learn
activate learn
- 3.使用命令進入 scrapy shell "需要訪問的地址"
例如:
scrapy shell "http://baidu.com"
- 4.操作截圖:
這裡會出現一大堆,不用管,最後會有一個程式碼輸入的地方:
這裡就是我們寫程式碼的地方
scrapy shell 的簡單使用
- 1. response
- 執行命令之後,可以看到有很多 [s] 開頭的東西,就是我們可以在下面程式碼輸入框中使用的變數**
- 執行後,會自動將指定 url 的網頁
- 下載完後,url 的內容儲存在 response 的變數中
- response.body
- response.headers
- response.headers['Server']
- response.xpath() 使用 xpath
- response.css() 使用 css 語法選取內容
- 2.例如:我們使用:view(response):
- 截圖:
- 結果就是呼叫瀏覽器,檢視檢視
- 截圖:
- 3.例如:我們想檢視 headers 的內容:
- 使用:response.headers
- 截圖:
- 4.一回車就執行了,怎樣多行輸入呢?
- 在 scrapy shell 中,我們只進行簡單的多行輸入,比如函式,for迴圈,更多的多個函式,特別多行的話,我們何嘗不使用 Pycharm 呢,我們使用 scrapy shell 的目的就是簡單執行,快速
- 例如:for 迴圈列印 response.headers
- 截圖:
- 這時候又有新的問題了,for 迴圈,可以多行了,但回車沒法執行了
- 這時候使用的是:Ctrl + Enter 鍵執行
- 5.怎樣輸出屬性的值呢?
- 例如:我們列印 response.headers 中的一個 Set-Cookie 項對於的值
- 截圖:
- 6.selector
- 選擇器,允許使用者使用選擇器來選擇自己想要的內容
- response.selector.xpath:response.xpath 是 response.selector.xpath 的快捷方式
- response.selector.css:response.css 是 response.selector.css 的快捷方式
- selector.extract:把節點內容用 unicode 形式返回
- selector.re:允許使用者通過正則選擇內容
response.xpath 使用案例
- 1.使用 scrapy shell "http://baidu.com" 訪問百度,得到response
- 2.目標:我們是想要找到這個頁面的所有 div 頭,並賦值給 divs
- 3.使用 len(divs) 檢視共有多少個 div
- 4.我們輸出下標為 0 的 div 頭資訊
- 操作截圖:
- 5.這裡只是頭資訊,想要獲取 div 的內容程式碼
- 使用 divs[1].extract()
- 截圖:
- 6.使用 xpath 精確查詢
1.我們想找表格中的一個 a 標籤
response.xpath( "//table/tr/td/a" )
- 2.//table 表示不管 table 在哪個標籤的下面,找到所有的 table 標籤
- 3.這裡 / 只是表示在哪個標籤裡,是誰的子標籤,不一定是兒子標籤,也包括孫子標籤
- 4.如果需要查詢的頁面有很多很多 a 標籤,那麼這樣找,範圍還是太寬了
5.按標籤屬性查詢:
res_href = response.xpath( "//table/tr/td/a/@href" )
- 這時候,我就可以找到所有 a 標籤的連結,我們可以列印一下連結
for i in res_href :
print( i.extract() )- 6.按標籤屬性的值查詢:
- 例如:我們想要查詢表格中一個 id = teacher 的一個列
res_href = response.xpath( "//table/tr/td[@id='teacher']" )
以上是使用 xpath 精確查詢,當然也可以使用 re 正則 去查詢,本篇就介紹到這裡了,拜拜
更多文章連結:Python 爬蟲隨筆
- 本筆記不允許任何個人和組織轉載