我正在使用 Python 2.7 lxml,但在查找表时遇到问题。
通过 id od 类查找它会产生空结果。
a = [c.text for c in kontent.xpath('//table[@id="blk-ctnt-2308"[1]//tr/td[5]]
还有其他建议吗?
谢谢
您在索引之前的 XPath 表达式中缺少方括号[1]
:
a = [c.text for c in kontent.xpath('//table[@id="blk-ctnt-2308"][1]//tr/td[5]') ]
此外,您可能想//table[@id="blk-ctnt-2308"][1]
在尝试完整的表达式之前检查表达式的第一部分是否有效。
最后,如果源表具有id
属性,则索引[1]
是多余的,但仍应有效。
我不能lxml
在这台机器上使用,所以我使用 ElementTree XML API 来测试 XPath,这段代码:
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
产生这个输出:
['5a', '5b', '5c']