前言
本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理。
PS:如有需要Python學習資料的小伙伴可以點擊下方鏈接自行獲取
在使用Python本爬蟲采集數據時,一個很重要的操作就是如何從請求到的網頁中提取數據,而正確定位想要的數據又是第一步操作。
本文將對比幾種 Python 爬蟲中比較常用的定位網頁元素的方式供大家學習
1.傳統 BeautifulSoup 操作
2.基於 BeautifulSoup 的 CSS 選擇器(與 PyQuery 類似)
3.XPath
4.正則表達式
參考網頁是當當網圖書暢銷總榜:
我們以獲取第一頁 20 本書的書名為例。先確定網站沒有設置反爬措施,是否能直接返回待解析的內容:
仔細檢查后發現需要的數據都在返回內容中,說明不需要特別考慮反爬舉措
審查網頁元素后可以發現,書目信息都包含在 li 中,從屬於 class 為 bang_list clearfix bang_list_mode 的 ul 中
進一步審查也可以發現書名在的相應位置,這是多種解析方法的重要基礎
1. 傳統 BeautifulSoup 操作
經典的 BeautifulSoup 方法借助 from bs4 import BeautifulSoup,然后通過 soup = BeautifulSoup(html, "lxml") 將文本轉換為特定規范的結構,利用 find 系列方法進行解析,代碼如下:
成功獲取了 20 個書名,有些書面顯得冗長可以通過正則或者其他字符串方法處理,本文不作詳細介紹
2. 基於 BeautifulSoup 的 CSS 選擇器
這種方法實際上就是 PyQuery 中 CSS 選擇器在其他模塊的遷移使用,用法是類似的。關於 CSS 選擇器詳細語法可以參考:http://www.w3school.com.cn/cssref/css_selectors.asp由於是基於 BeautifulSoup 所以導入的模塊以及文本結構轉換都是一致的:
然后就是通過 soup.select 輔以特定的 CSS 語法獲取特定內容,基礎依舊是對元素的認真審查分析:
3. XPath
XPath 即為 XML 路徑語言,它是一種用來確定 XML 文檔中某部分位置的計算機語言,如果使用 Chrome 瀏覽器建議安裝 XPath Helper 插件,會大大提高寫 XPath 的效率。
之前的爬蟲文章基本都是基於 XPath,大家相對比較熟悉因此代碼直接給出:
4. 正則表達式
如果對 HTML 語言不熟悉,那么之前的幾種解析方法都會比較吃力。這里也提供一種萬能解析大法:正則表達式,只需要關注文本本身有什么特殊構造文法,即可用特定規則獲取相應內容。依賴的模塊是 re
首先重新觀察直接返回的內容中,需要的文字前后有什么特殊:
觀察幾個數目相信就有答案了:<div class="name"><a href="http://product.dangdang.com/xxxxxxxx.html" target="_blank" title="xxxxxxx"> 書名就藏在上面的字符串中,蘊含的網址鏈接中末尾的數字會隨着書名而改變。
分析到這里正則表達式就可以寫出來了:
可以發現正則寫法是最簡單的,但是需要對於正則規則非常熟練。所謂正則大法好!
當然,不論哪種方法都有它所適用的場景,在真實操作中我們也需要在分析網頁結構來判斷如何高效的定位元素,最后附上本文介紹的四種方法的完整代碼,大家可以自行操作一下來加深體會