Python XPath 解析带撇号的标签

8 投票
2 回答
2090 浏览
提问于 2025-04-17 08:07

我刚接触XPath,想用它来解析一个网页。我需要从某个标签中获取信息,但标题里的转义单引号搞得我一团糟。

我使用的解析工具是Grab

源代码中的标签:

<img src='somelink' border='0' alt='commission:Alfred\'s misadventures' title='commission:Alfred\'s misadventures'>

实际的XPath:

g.xpath('.//tr/td/a[3]/img').get('title')

返回结果:

commission:Alfred\\

有没有什么办法可以解决这个问题呢?

谢谢!

2 个回答

2

因为提供的“XML”文档格式不正确,里面有嵌套的引号,所以无法对它进行XPath表达式的评估。

可以将这个格式不正确的文本修正为:

<img src="somelink"
 border="0"
 alt="commission:Alfred's misadventures"
 title="commission:Alfred's misadventures"/>

如果有一个奇怪的要求是不使用引号,那么一种正确的转换方式是:

<img src='somelink'
 border='0'
 alt='commission:Alfred&apos;s misadventures'
 title='commission:Alfred&apos;s misadventures'/>

如果你得到的是不正确的输入,在像C#这样的语言中,可以尝试将其转换为正确的格式,方法是:

string correctXml = input.replace("\\'s", "&apos;s")

在Python中可能也有类似的方法可以做到这一点。

5

输入的数据如果不规范,输出的结果也会有问题。你的输入格式不正确,因为它没有正确处理单引号。很多编程语言(比如Python)用反斜杠来处理字符串中的引号,但XML不这样做。你可以选择:1)用双引号把属性值包起来;或者 2)使用 &apos; 来表示单引号

根据XML规范

为了让属性值可以同时包含单引号和双引号,单引号(')可以用 &apos; 来表示,而双引号(")可以用 &quot; 来表示。

撰写回答