需要选择性地转义html实体(&)

时间:2010-08-04 06:40:18

标签: python escaping html-entities

我正在抓取一个html页面,然后使用xml.dom.minidom.parseString()创建一个dom对象。

然而,html页面有一个'&'。我可以使用cgi.escape将其转换为&,但它也会转换我的所有html<>标记到<>,这使得parseString()不满意。

我该如何解决这个问题?我宁愿不只是破解它而直接取代“&”s

感谢

4 个答案:

答案 0 :(得分:1)

  

我宁愿不只是破解它   直接取代“&”s

呃,为什么?这就是cgi.escape正在做的事情 - 实际上只是对必须转义的某些字符的搜索和替换操作。

如果您只想替换单个字符,只需替换单个字符:

yourstring.replace('&', '&')

不要在灌木丛中殴打。

答案 1 :(得分:1)

对于抓取,请尝试使用可以处理此类html“标记汤”的库,例如lxml,其中包含html parser(以及lxml.html中的专用html包),或{ {3}}(您还会发现这些库还包含其他能够更轻松地使用html进行抓取/处理的内容,除了能够处理格式错误的文档:从表单中获取信息,使用css选择器创建绝对超链接。 ..)

答案 2 :(得分:0)

如果您想确保不会意外地将已经转义的&(即未转换为&转换为&ß转换为{{ 1}}),你可以

ß

import re newstring = re.sub(r"&(?![A-Za-z])", "&", oldstring) 后面跟着一封信时,这将留下&

答案 3 :(得分:0)

您不应使用XML解析器来解析非XML的数据。相反,找一个HTML解析器,从长远来看,你会更快乐。标准库有一些(HTMLParser和htmllib),而BeautifulSoup是一个备受喜爱的第三方包。