所以,我正在访问一些格式如下的 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/