Python XPath 结果只显示 []
嘿,我最近刚开始使用Python,想用它来做一些xPath的操作。问题是,当我打印查询的结果时,只得到一个空列表[],我不知道为什么 =S
import libxml2, urllib
doc = libxml2.parseDoc(urllib.urlopen("http://www.domain.com/").read())
result = doc.xpathEval("//th//td[(((count(preceding-sibling::*) + 1) = 2) and parent::*)]//a")
if result != []:
print result
elif result == "":
print "null"
else:
print result
doc.freeDoc()
我没有收到任何错误提示,就是一个空列表[]. 这可能是什么原因呢?另外,有没有比这里更好的libxml2文档?因为我觉得那个文档实在是太让人困惑了 =S
编辑
我修改了代码,现在得到的结果比之前的空列表多了一些内容,这些内容应该和我尝试解析的HTML不合法有关(但那不是我的,所以我不能修改它)。有没有什么办法可以让Python对这个问题宽容一些呢?
^ 实体:第3552行:解析错误: 标签tr的数据过早结束 第209行
^ 实体:第3552行:解析错误: 标签tbody的数据过早结束 第208行
^ 实体:第3552行:解析错误: 标签table的数据过早结束 第207行
^ 实体:第3552行:解析错误: 标签input的数据过早结束 第206行
^ 实体:第3552行:解析错误: 标签input的数据过早结束 第205行
^ 实体:第3552行:解析错误: 标签form的数据过早结束 第204行
^ 实体:第3552行:解析错误: 标签table的数据过早结束 第99行
^ 实体:第3552行:解析错误: 标签div的数据过早结束 第98行
^ 实体:第3552行:解析错误: 标签body的数据过早结束 第96行
^ 实体:第3552行:解析错误: 标签html的数据过早结束 第3行
^ 回溯(最近的调用在前): 文件 "C:\Python26\lib\site-packages\libxml2.py", 第1263行,在parseDoc中 如果ret是None:抛出parserError('xmlParseDoc()失败') libxml2.parserError: xmlParseDoc() 失败
其实还有更长的错误列表,但放在这里没什么意义,因为所有错误都是由于HTML不合法造成的。
3 个回答
你是不是把
顺便提一下:你在XPath中那些不必要的复杂性是从哪里来的呢?比如这个:
//th//td[(((count(preceding-sibling::*) + 1) = 2) and parent::*)]//a
其实和这个是一样的:
//th//td[count(preceding-sibling::*) = 1)]//a
而且很可能还等同于这个:
//th/td[2]//a
可能是因为你的XPath没有选中任何元素。例如,你在寻找
你为什么说(count(preceding-sibling::*) + 1) = 2
而不是count(preceding-sibling::*) = 1
呢?
如果你使用一个更简单的XPath,结果是否符合你的预期呢?