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

显示键

我为画了一个简单的结构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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么第一个 printf 不起作用而其他两个使用相同的结构?

为什么<table>的<tr>元素超出第一个元素却不增加表的childElementCount?

为什么需要调整第一个图像的大小以融合两个图像?

CSS - 用 Class 隐藏第一个 <tr>

每个tr的第一个td值

jquery设置第一个tr为fixed而不丢失宽度

为什么当我一个接一个地执行两个mysqli查询时,我只能执行第一个查询?

Python 连接两个列表,第一个索引相同

合并两个rxjs流,仅在第一个为true时发出

在if语句中检查两个条件,即使第一个条件为false

如何选择<tr>中的第一个和最后一个<td>?

从最后一个<tr>的第一个<td>中选择innerHTML-jQuery

为什么在程序中两次使用gets()来为两个不同的数组获取输入,即使对于第一个数组也仅返回第二个输入?

XPath-“获取第一个tr,其第一个td的文本等于'abcd'”

如果表头<th>不存在,则将第一个子<tr> <td>移为<th>

性能:为什么相同算法的第一个实现速度要快得多

为什么休眠与规范做两个查询时,第一个得到了被要求的一切吗?

为什么 sys.getsizeof() 为两个实例报告相同的大小,即使一个实例有一个额外的属性?

在CSS中选择第二个tr的第一个td

有什么方法可以清除/隐藏两个td表中的第一个td,而无需访问第一个td?

仅当具有两个类并且共享相同的第一个类时才选择元素

组合框中的两个相同项目,但第一个总是被选择C#

为什么模式匹配一个单词却有两个相同的单词?

为什么IEnumerable的Where将第一个参数传递为“ this”

为什么在无服务器中响应的第一个元素为空?

如果findFirst()找到的第一个元素为null,为什么会抛出NullPointerException?

为什么第一个客户端看到源IP为0.0.0.0?

为什么没有为方法/构造函数的第一个参数命名?

为什么将\ 0定义为C中char数组的第一个元素?