爬蟲搜索神器BeautifulSoup和XPath 的使用

一、看官網(wǎng)上說明

“ Beautiful Soup是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫. 它能夠通過你喜歡的轉(zhuǎn)換器實現(xiàn)慣用的文檔導航, 查找, 修改文檔的方式. Beautiful Soup會幫你節(jié)省數(shù)小時甚至數(shù)天的工作時間.

“ XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。
XPath 是 W3C XSLT 標準的主要元素,并且 XQuery 和 XPointer 都構(gòu)建于 XPath 表達之上。

二、從原理上區(qū)別

BeautifulSoup是一個第三方的Python庫,BeautifulSoup是用python寫的XPath是一門語言,技術。xpath是用c寫的
BeautifulSoup和XPath的原理不一樣,BeautifulSoup是基于DOM的,會載入整個文檔,解析整個DOM樹,因此時間和內(nèi)存開銷都會大很多。而lxml只會局部遍歷。

三、如何使用

xpath 要求一定清楚文檔層次結(jié)構(gòu),它通過元素和屬性進行導航,可以使用絕對路徑或相對路徑查找,而beautifulsoup 不必清楚文檔結(jié)構(gòu),可以直接找某些標簽,簡單粗暴。

打個比方,如果我們要找這個地址:移動互聯(lián)網(wǎng)創(chuàng)新園(上海)
如用正則表達式的話,是這樣描述的:它是北邊是復旦軟件園,門口是高架輕軌線...
如用XPath來描述的話是:它在 上海市 寶山區(qū) 逸仙路 2816號。(從大到小,絕對路徑)

舉栗子說明,獲取簡書首頁的熱門文章:

首先分析一下首頁html文檔結(jié)構(gòu):


首頁源代碼

分析一下,我們看到:

  1. 文章標題是包含在h4標簽下面的a標簽中;
  2. 每篇文章信息(作者,標題,閱讀量,喜歡)是在一個ul標簽下,有兩種樣式article-list thumbnails 和have-img,即有縮略圖和無圖

實現(xiàn):

  1. BeautifulSoup:
from bs4 import BeautifulSoup  #導入庫

 #html 是爬取的網(wǎng)頁源代碼, 將一段文檔傳入BeautifulSoup 的構(gòu)造方法,就能得到一個文檔的對象
soup = BeautifulSoup(html,'html.parser',from_encoding='utf-8')
#查找所有的h4標簽 
links = soup.find_all("h4")

 for link in links:
       print link
  1. XPath
  from lxml import etree

  selector = etree.HTML(html)
  links = selector.xpath('//h4/a/text()')
  for link in links:
      print link

可以使用Chrome的審核元素功能來找到我們所需要提取內(nèi)容的xpath

copy xpath

注意:copy出來的path:
//*[@id="list-container"]/ul[2]/li[1]/div/h4/a
是指向一個指定的內(nèi)容,對比一下文檔結(jié)構(gòu),如果需要提取所有文章信息(需要循環(huán)的部分),如何修改?

以上兩段代碼都提取到首頁所有文章,打印輸出的形式也不一樣,soup.find_all("h4")找到的是包含文章標題和鏈接的所有h4標簽(包含標簽),selector.xpath('//h4/a/text()')找到的是h4標簽下a標簽中的文字內(nèi)容(text())。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容