Skip to main content
 首页 » 编程设计

python之在 python 中通过 xpath 在 html 中导航

2025年05月04日14lhb25

所以,我正在访问一些格式如下的 url:

<DOCUMENT> 
 <TYPE>A 
 <SEQUENCE>1 
 <TEXT> 
  <HTML> 
   <BODY BGCOLOR="#FFFFFF" LINK=BLUE  VLINK=PURPLE> 
   </BODY> 
  </HTML> 
 </TEXT> 
</DOCUMENT> 
 
<DOCUMENT> 
 <TYPE>B 
 <SEQUENCE>2 
 ... 

如您所见,它开始一个文档(序列号为 1),然后结束该文档,然后开始序列号为 2 的文档,依此类推。

所以,我想做的是在 python 中编写一个 xpath 地址,以便只获取序列值为 1 的文档(或者,等效地,TYPE A)。

我认为这样的事情会起作用:

import lxml 
from lxml import html 
page = html.fromstring(pagehtml) 
type_a = page.xpath("//document[sequence=1]/descendant::*/text()") 

然而,它只是给我一个空列表作为 type_a 变量。

有人可以告诉我这段代码中我的错误是什么吗?我对这个 xml 东西真的很陌生。

请您参考如下方法:

这可能是因为那是非常可疑的 HTML。 <SEQUENCE>标签未关闭,因此它很可能被 lxml 解释为包含 所有 的代码,直到下一个 </DOCUMENT>。 , 所以它最终不仅仅包含 1 .当您的 XPath 代码查找 <SEQUENCE> 时包含 1 , 没有。

此外,XML 是区分大小写的,但 HTML 不是。 XPath 是为 XML 设计的,所以它也是区分大小写的,这也会停止你的 document匹配<DOCUMENT> .

尝试 //DOCUMENT[starts-with(SEQUENCE,'1')] .那是基于 Xpath using starts-with function .

理想情况下,如果输入在您的控制之下,您应该关闭类型和序列标签(使用 </TYPE> 和 </SEQUENCE> )以使输入有效。