使用Python lxml的XML XPath搜索无法根据text()输出过滤

0 投票
1 回答
519 浏览
提问于 2025-04-17 13:18

可能我漏掉了什么简单的东西。当我筛选出所有的“a”节点时,我能看到它们的文本,包括我想要的目标链接,这没问题:

ipdb> print [x.text for x in root.xpath(u".//a")]
[u'\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7', None, ... ]

但是当我筛选出上面第一个“a”元素中包含的特定文本时,我却什么都得不到:

ipdb> print [x.text for x in root.xpath(
    u".//a[text()=" + 
    u'\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7' + 
    u']'  )]
[]
ipdb> 

有没有什么想法?

1 个回答

1

这里有两种语言:Python和XPath。它们都有用引号括起来的字符串。

在解释Python的语法时,传递给.xpath()的字符串内容(也就是你的XPath表达式)看起来像这样:.//a[text()=Some text]。但是在XPath中,文本字符串需要用引号括起来:.//a[text()="Some text"]。接下来,你需要把这个用Python的字符串格式表示出来。这里有几种选择:

.xpath('.//a[text()="Some text"]')
.xpath(".//a[text()=\"Some text\"]")
.xpath(""".//a[text()="Some text"]""")

撰写回答