安裝
$ 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代碼版本轉換腳本
安裝解析器
Beautiful Soup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,其中一個是 lxml .根據作業系統不同,可以選擇下列方法來安裝lxml:
$ apt-get install Python-lxml
另一個可供選擇的
解析器是純Python實現的 html5lib , html5lib的解析方式與瀏覽器相同,可以選擇下列方法來安裝html5lib:
$ apt-get install Python-html5lib
下表列出了主要的解析器,以及它們的優缺點:
解析器 | 使用方法 | 優勢 | 劣勢 |
---|
| BeautifulSoup(markup, "html.parser") | Python的內置標準庫執行速度適中文檔容錯能力強 | Python 2.7.3 or 3.2.2)前 的版本中文檔容錯能力差 |
| BeautifulSoup(markup, "lxml") | | |
| BeautifulSoup(markup, ["lxml-xml"]) BeautifulSoup(markup, "xml") | | |
| 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會選擇指定的解析器來解析文檔。