# 安裝 Beautiful Soup
如果你用的是新版的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](http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html) 的發布版本,因為很多項目還在使用BS3, 所以 `BeautifulSoup` 包依然有效.但是如果你在編寫新項目,那么你應該安裝的 `beautifulsoup4` )
如果你沒有安裝 `easy_install` 或 `pip` ,那你也可以 [下載BS4的源碼](http://www.crummy.com/software/BeautifulSoup/download/4.x/) ,然后通過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](http://lxml.de/) .根據操作系統不同,可以選擇下列方法來安裝lxml:
`$ apt-get install Python-lxml`
`$ easy_install lxml`
`$ pip install lxml`
另一個可供選擇的解析器是純Python實現的 [html5lib](http://code.google.com/p/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解析方法不夠穩定.
提示: 如果一段HTML或XML文檔格式不正確的話,那么在不同的解析器中返回的結果可能是不一樣的,查看 [解析器之間的區別](#id49) 了解更多細節