Python BeautifulSoup庫的用法
阿新 • • 發佈:2019-02-12
html5 pan int parser span imp 查找 ble 並且
BeautifulSoup是一個可以從HTML或者XML文件中提取數據的Python庫,它通過解析器把文檔解析為利於人們理解的文檔導航模式,有利於查找和修改文檔。
BeautifulSoup3目前已經停止開發,現在推薦使用BeautifulSoup4,它被移植到了bs4中。
# 使用時需要導入 from bs4 import BeautifulSoup
解析器
BeautifulSoup4中常用4種主要的解析器,使用前需要安裝:
#不同系統安裝方法 $ apt-get install Python-lxml $ easy_install lxml $ pip install lxml# pycharm中安裝可以先import xxx,顯示有錯誤然後點擊安裝,安裝後刪除import語句,即可正常使用
解析器 | 使用方法 | 優勢 | 劣勢 |
Python標準庫 |
BeautifulSoup(DocumentName, "html.parser")
|
|
Python 2.7.3 or 3.2.2前的班中文容錯能力差 |
lxml HTML解析器 | BeautifulSoup(DocumentName, "lxml") |
|
需要安裝C語言庫 |
lxml XML解析器 |
BeautifulSoup(DocumentName, "xml") BeautifulSoup(DocumentName, ["lxml","xml"]) |
|
需要安裝C語言庫 |
html5lib | BeautifulSoup(DocumentName, "html5lib") |
|
速度慢,需要依賴python庫 |
不同解析器的解析結果:
# 符合HTML標準的解析結果
htmldoc = "<a><p></p></a>" print("None :",BeautifulSoup(htmldoc)) print("html.parser :", BeautifulSoup(htmldoc, "html.parser")) print("lxml :", BeautifulSoup(htmldoc, "lxml")) print("xml :", BeautifulSoup(htmldoc, "lxml-xml")) print("html5lib :", BeautifulSoup(htmldoc, "html5lib")) """ 結果為: None : <html><body><a><p></p></a></body></html> html.parser : <a><p></p></a> lxml : <html><body><a><p></p></a></body></html> xml : <?xml version="1.0" encoding="utf-8"?> <a><p/></a> html5lib : <html><head></head><body><a><p></p></a></body></html> """
# 不符合HTML標準的解析結果 htmldoc = "<a></p></a>" print("None :",BeautifulSoup(htmldoc)) print("html.parser :", BeautifulSoup(htmldoc, "html.parser")) print("lxml :", BeautifulSoup(htmldoc, "lxml")) print("xml :", BeautifulSoup(htmldoc, "lxml-xml")) print("html5lib :", BeautifulSoup(htmldoc, "html5lib")) """ 結果為: None : <html><body><a></a></body></html> html.parser : <a></a> lxml : <html><body><a></a></body></html> xml : <?xml version="1.0" encoding="utf-8"?> <a/> html5lib : <html><head></head><body><a><p></p></a></body></html> """
html5lib會把所有的標簽不全,並且加上html、head、body,標準的html格式;默認、html.parser、lxml 解析器會把錯誤標簽忽略掉。
編碼
任何HTML或者XML文檔都有自己的編碼方式,但使用BeautifulSoup解析後,文檔都會被轉換為Unicode,輸出時編碼均為UTF-8。
因為BeautifulSoup用來編碼自動檢測庫來識別當前文檔的編碼,並自動轉換為Unicode編碼。但也有小概率會識別出錯,可以用.original_encoding來檢測編碼格式。
並且設置from_encoding參數可以提高文檔的解析速度。
htmldoc = b"<h1>\xed\xe5\xec\xf9</h1>" soup = BeautifulSoup(htmldoc, from_encoding="iso-8859-8") print(soup.h1) print(soup.original_encoding) """ 結果: <h1>????</h1> ‘iso8859-8‘ """
指定輸出編碼:
htmldoc = b"<h1>\xed\xe5\xec\xf9</h1>" soup = BeautifulSoup(htmldoc, from_encoding="iso-8859-8")
print(soup.prettify("latin-1"))
"""
結果:
b‘<h1>\n νεμω\n</h1>‘ """
Python BeautifulSoup庫的用法