2010-05-06 31 views

回答

11

看看BeautifulSoup。它在解析HTML時非常流行和優秀。

+4

它不是建立在,如果我沒有記錯 – Guy 2010-05-06 15:12:14

+4

不,它不是內置。但是您可以使用easy_install輕鬆安裝,或者從網站下載並放入PYTHONPATH。整個BeautifulSoup包含在一個文件中,所以它不是一個負擔。 – Bartosz 2010-05-06 15:17:43

+0

BeautifulSoup應該解析骯髒的HTML不是「非常合適」的一個。 – tbz 2015-01-05 11:20:27

25

我會推薦lxml。我喜歡BeautifulSoup,但一般都會有維護問題,以及後續版本的兼容性問題。我一直很高興使用lxml。


後來:最好的建議是使用lxml,html5lib或BeautifulSoup 3.0.8。 BeautifulSoup 3.1.x適用於python 3.x,並且已知在較早的python版本as noted on the BeautifulSoup website中存在問題。

Ian Bicking在使用lxml時有一個good article

ElementTree是一個進一步的建議,但我從來沒有使用它。


2012-01-18:有人已經通過,並決定downvote我和巴爾託什,因爲我們建議很容易獲得,但不是蟒蛇分佈的一部分Python包。因此,對於高度字面上的StackOverflowers:「您可以使用xml.dom.minidom,但沒有人會推薦這種替代方案。」

+1

爲什麼它的價值,我試圖解析一些使用ElementTree和XML minidom的HTML,並且他們都扼殺腳本標記(JavaScript)中的解析錯誤! – Michael 2014-10-08 22:08:37

+0

我剛剛添加了一個xml.dom.minidom的工作示例的答案。在某些情況下,安裝外部模塊非常麻煩或不可能。另外這就是原始問題的要求。 – velotron 2016-11-22 19:06:01

9

BeautifulSoup和lxml很棒,但這裏不是合適的答案,因爲這個問題是關於內建函數的。以下是使用內置minidom模塊解析HTML字符串的示例。經測試與CPython的3.5.2:

from xml.dom.minidom import parseString 

html_string = """ 
<!DOCTYPE html> 
<html><head><title>title</title></head><body><p>test</p></body></html> 
""" 

# extract the text value of the document's <p> tag: 
doc = parseString(html_string) 
paragraph = doc.getElementsByTagName("p")[0] 
content = paragraph.firstChild.data 

print(content)