BeautifulSoup

BeautifulSoup是一個可以從HTMLXML檔案中提取數據的Python庫.它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.BeautifulSoup會幫你節省數小時甚至數天的工作時間。

基本介紹

  • 外文名:BeautifulSoup
  • 所屬學科:計算機
  • 釋義:從HTML或XML檔案中提取數據的Python庫
安裝,使用,

安裝

如果你用的是新版的Debain或ubuntu,那么可以通過系統的軟體包管理來安裝:
$ apt-get install Python-bs4
Beautiful Soup 4 通過PyPi發布,所以如果你無法使用系統包管理安裝,那么也可以通過 easy_install 或 pip
來安裝.包的名字是 beautifulsoup4 ,這個包兼容Python2和Python3.
$ easy_install beautifulsoup4
$ pip install beautifulsoup4
(在PyPi中還有一個名字是 BeautifulSoup 的包,但那可能不是你想要的,那是 Beautiful Soup3 的發布版本,因為很多項目還在使用BS3, 所以 BeautifulSoup 包依然有效.但是如果你在編寫新項目,那么你應該安裝的beautifulsoup4)
如果你沒有安裝 easy_install 或 pip,那你也可以下載BS4的源碼 ,然後通過setup.py來安裝。
$ Python setup.py install
如果上述安裝方法都行不通,Beautiful Soup的發布協定允許你將BS4的代碼打包在你的項目中,這樣無須安裝即可使用.
作者在Python2.7和Python3.2的版本下開發Beautiful Soup, 理論上Beautiful Soup應該在所有當前的Python版本中正常工作
安裝完成後的問題
Beautiful Soup發布時打包成Python2版本的代碼,在Python3環境下安裝時,會自動轉換成Python3的代碼,如果沒有一個安裝的過程,那么代碼就不會被轉換.
如果代碼拋出了 ImportError 的異常: “No module named HTMLParser”, 這是因為你在Python3版本中執行Python2版本的代碼.
如果代碼拋出了 ImportError的異常: “No module named html.parser”, 這是因為你在Python2版本中執行Python3版本的代碼。
如果遇到上述2種情況,最好的解決方法是重新安裝BeautifulSoup4.
如果在ROOT_TAG_NAME = u’[document]’代碼處遇到 SyntaxError“Invalid syntax”錯誤,需要將把BS4的Python代碼版本從Python2轉換到Python3. 可以重新安裝BS4:
$ Python3 setup.py install
或在bs4的目錄中執行Python代碼版本轉換腳本
$ 2to3-3.2 -w bs4
安裝解析器
Beautiful Soup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,其中一個是 lxml .根據作業系統不同,可以選擇下列方法來安裝lxml:
$ apt-get install Python-lxml
$ easy_install lxml
$ pip install lxml
另一個可供選擇的解析器是純Python實現的 html5lib , html5lib的解析方式與瀏覽器相同,可以選擇下列方法來安裝html5lib:
$ apt-get install Python-html5lib
$ easy_install html5lib
$ pip install html5lib
下表列出了主要的解析器,以及它們的優缺點:
解析器
使用方法
優勢
劣勢
Python標準庫
BeautifulSoup(markup, "html.parser")
Python的內置標準庫執行速度適中文檔容錯能力強
Python 2.7.3 or 3.2.2)前 的版本中文檔容錯能力差
lxml HTML 解析器
BeautifulSoup(markup, "lxml")
速度快文檔容錯能力強
需要安裝C語言
lxml XML 解析器
BeautifulSoup(markup, ["lxml-xml"])
BeautifulSoup(markup, "xml")
速度快唯一支持XML的解析器
需要安裝C語言庫
html5lib
BeautifulSoup(markup, "html5lib")
最好的容錯性以瀏覽器的方式解析文檔生成HTML5格式的文檔
速度慢不依賴外部擴展
推薦使用lxml作為解析器,因為效率更高. 在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必須安裝lxml或html5lib, 因為那些Python版本的標準庫中內置的HTML解析方法不夠穩定.

使用

將一段文檔傳入BeautifulSoup 的構造方法,就能得到一個文檔的對象, 可以傳入一段字元串或一個檔案句柄.
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("index.html"))
soup = BeautifulSoup("data")
首先,文檔被轉換成Unicode,並且HTML的實例都被轉換成Unicode編碼
BeautifulSoup("Sacré bleu!")
Sacré bleu!
然後,Beautiful Soup選擇最合適的解析器來解析這段文檔,如果手動指定解析器那么Beautiful Soup會選擇指定的解析器來解析文檔。

相關詞條

熱門詞條

聯絡我們