经过一番研究以后才发现原来libxml2其实已经内置了对HTML的解析——即使是不很规范的HTML。所以上篇《xpath在XHTML解析中的应用 》完全是我学艺不精的产物。囧 不过好处是顺便学习到了j7a7c7k7 兄推荐的tidy(用的是令狐提供的µTidylib ),这也是个好东东。 现在来看如何直接使用lxml(即前文说过的libxml2的一个python binding)处理那个样本“页面 ”: import codecs from lxml import etree f=codecs.open("raptor.htm","r","utf-8") content=f.read() f.close() tree=etree.HTML(content) Bingo!果然成功。关键就在于etree提供了HTML这个解析函数。之后的事情就好办多了,因为可以直接对HTML使用xpath。 不过这个样本页面中要解析的部分有一个问题就是:那个ul节点没有id,所以只好麻烦一点了。 完整的xpath应该是这样写的(注意,原文件中的TAG有大小写的情况,但是在XPATH里只能用小写): nodes=tree.xpath(u"/html/body/form/div[@id='leftmenu']/h3[text()='档案']/following-sibling::ul[1]") 这句xpath的意思是寻找这样一个东东。

档案