gpt4 book ai didi

python - 为什么这两个 tr 被 lxml 解析为相同的第一个 tr?

转载 作者:行者123 更新时间:2023-12-01 07:26:27 26 4
gpt4 key购买 nike

我绘制了 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] 表示选择作为其父元素的第一个子元素(具有该名称)的任何 tr 元素。

选择以下 tr,因为它是 div 的第一个 tr 子级:

<tr id="tr1"> 
<td>11</td>
<td>12</td>
</tr>

选择以下 tr,因为它是 table 的第一个 tr 子项:

<tr id="tr2">
<td>21</td>
<td>22</td>
</tr>

要获取第一个匹配项,请首先将 xpath 括在括号中...

doc.xpath('(//tr)[1]')

关于python - 为什么这两个 tr 被 lxml 解析为相同的第一个 tr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57422979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com