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


本篇詳細介紹 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 "需要訪問的地址"
  • 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 爬蟲隨筆


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM