python lxml找不到表

时间:2012-06-11 08:14:07

标签: python lxml

我正在使用Python 2.7 lxml,我在查找表时遇到了问题。

通过id od class查找它会产生null结果。

 a = [c.text for c in kontent.xpath('//table[@id="blk-ctnt-2308"[1]//tr/td[5]]

还有其他建议吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您在索引[1]

之前的XPath表达式中缺少方括号
a = [c.text for c in kontent.xpath('//table[@id="blk-ctnt-2308"][1]//tr/td[5]') ]

此外,您可能需要在尝试完整表达式之前检查表达式的第一部分是否有效{。{1}}。

最后,如果源表具有//table[@id="blk-ctnt-2308"][1]属性,则索引id是多余的,但应该仍然有效。

更新

我不能在这台机器上使用[1],所以我使用ElementTree XML API来测试XPath,这段代码:

lxml

生成此输出:

import xml.etree.ElementTree

html = '''<html>
<head><title></title></head>
<body>
<table id="blk-ctnt-2308">
<tr><td>1a</td><td>2a</td><td>3a</td><td>4a</td><td>5a</td><td>6a</td></tr>
<tr><td>1b</td><td>2b</td><td>3b</td><td>4b</td><td>5b</td><td>6b</td></tr>
<tr><td>1c</td><td>2c</td><td>3c</td><td>4c</td><td>5c</td><td>6c</td></tr>
</table>
<table id="blk-ctnt-2309">
<tr><td>1a</td><td>2a</td><td>3a</td><td>4a</td><td>5a</td><td>6a</td></tr>
<tr><td>1b</td><td>2b</td><td>3b</td><td>4b</td><td>5b</td><td>6b</td></tr>
<tr><td>1c</td><td>2c</td><td>3c</td><td>4c</td><td>5c</td><td>6c</td></tr>
</table>
</body>
</html>'''

tree = xml.etree.ElementTree.fromstring(html)
results = [ c.text
            for c in tree.findall('body/table[@id="blk-ctnt-2308"]//tr/td[5]') ]
print results