Python XPath 解析带撇号的标签
我刚接触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's misadventures'
title='commission:Alfred's misadventures'/>
如果你得到的是不正确的输入,在像C#这样的语言中,可以尝试将其转换为正确的格式,方法是:
string correctXml = input.replace("\\'s", "'s")
在Python中可能也有类似的方法可以做到这一点。
5
输入的数据如果不规范,输出的结果也会有问题。你的输入格式不正确,因为它没有正确处理单引号。很多编程语言(比如Python)用反斜杠来处理字符串中的引号,但XML不这样做。你可以选择:1)用双引号把属性值包起来;或者 2)使用 '
来表示单引号。
根据XML规范:
为了让属性值可以同时包含单引号和双引号,单引号(')可以用
'
来表示,而双引号(")可以用"
来表示。