Python爬蟲教程-33-scrapy shell 的使用

肖朋偉發表於2018-09-06

本篇詳細介紹 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 爬蟲隨筆


- 本筆記不允許任何個人和組織轉載

相關文章