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

标签 python xpath

所以,我正在访问一些格式如下的 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> )以使输入有效。

关于python - 在 python 中通过 xpath 在 html 中导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26894009/

相关文章:

Emacs 中的 Python(无模式,普通安装)

python - matplotlib 颜色条边界未实现

C# 和 XPath - 如何查询

c# - XmlDocument SelectNodes(Xpath): Order of result

python - 透明窗口背景(Python Tkinter)

python - 一维数组的数密度分布 - 2 次不同的尝试

selenium - 获取匹配元素的索引?

java - 从特定树级别获取 XML 节点

java - Matlab 中的 XPath 不会给出任何结果

python - 最小的工作 heroku django 应用程序