我为画了一个简单的结构target_html
:
table--div--tr[id="tr1"]
|--tr[id="tr2"]
|--tr[id="tr3"]
|--tr[id="tr4"]
使用lxml从target_html中提取第一个tr。
target_html="""
<table id="t1">
<div id="div1">
<tr id="tr1">
<td>11</td>
<td>12</td>
</tr>
</div>
<tr id="tr2">
<td>21</td>
<td>22</td>
</tr>
<tr id="tr3">
<td>31</td>
<td>32</td>
</tr>
<tr id="tr4">
<td>41</td>
<td>42</td>
</tr>
</table> """
doc=lxml.html.fromstring(target_html)
for item in doc.xpath('//tr[1]'):
print(item.text_content())
由lxml解析的扩展结果:
11
12
实际结果由lxml解析:
11
12
21
22
为什么将两个trs解析为tr[1]
?
xpath//tr[1]
表示选择任何tr
为其父级的第一个子元素(具有该名称)的元素。
tr
选择以下内容是因为它是的第一个tr
孩子div
:
<tr id="tr1">
<td>11</td>
<td>12</td>
</tr>
tr
选择以下内容是因为它是的第一个tr
孩子table
:
<tr id="tr2">
<td>21</td>
<td>22</td>
</tr>
要获取第一个匹配项,请先将xpath括在括号中...
doc.xpath('(//tr)[1]')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句