为什么这两个 tr 被 lxml 解析为相同的第一个 tr?
Why the two trs were parsed as just the same first tr by lxml?
我画的是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
为什么两个 tr 被解析为 tr[1]
?
xpath //tr[1]
表示 select 任何 tr
元素,即其 parent 的第一个 child 元素(具有该名称)。
以下 tr
被 select 编辑,因为它是 div
的第一个 tr
child:
<tr id="tr1">
<td>11</td>
<td>12</td>
</tr>
以下 tr
被 select 编辑,因为它是 table
的第一个 tr
child:
<tr id="tr2">
<td>21</td>
<td>22</td>
</tr>
要抓住第一次出现的地方,首先将 xpath 包装在 parentheses...
doc.xpath('(//tr)[1]')
我画的是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
为什么两个 tr 被解析为 tr[1]
?
xpath //tr[1]
表示 select 任何 tr
元素,即其 parent 的第一个 child 元素(具有该名称)。
以下 tr
被 select 编辑,因为它是 div
的第一个 tr
child:
<tr id="tr1">
<td>11</td>
<td>12</td>
</tr>
以下 tr
被 select 编辑,因为它是 table
的第一个 tr
child:
<tr id="tr2">
<td>21</td>
<td>22</td>
</tr>
要抓住第一次出现的地方,首先将 xpath 包装在 parentheses...
doc.xpath('(//tr)[1]')