本篇詳細介紹 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 爬蟲隨筆
- 本筆記不允許任何個人和組織轉載