我正在使用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]]
还有其他建议吗?
谢谢
答案 0 :(得分:0)
您在索引[1]
:
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