1

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

但是,html 页面有一个“&”。我可以使用 cgi.escape 将其转换为&amp;,但它也会将我所有的 html <> 标签转换为&lt;&gt;这使得 parseString() 不开心。

我该怎么做?我宁愿不只是破解它并直接替换“&”

谢谢

4

4 回答 4

1

我宁愿不只是破解它并直接替换“&”

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

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

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

不要拐弯抹角。

于 2010-08-04T06:43:50.627 回答
1

对于抓取,请尝试使用可以处理此类 html“标签汤”的库,例如 lxml,它具有html 解析器(以及lxml.html中的专用 html 包)或BeautifulSoup(您也会发现这些库除了能够处理格式错误的文档之外,还包含其他使抓取/使用 html 更容易的东西:从表单中获取信息,使超链接成为绝对,使用 css 选择器......)

于 2010-08-04T09:00:26.293 回答
0

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

于 2010-08-04T12:37:07.007 回答
0

如果你想确保你不会意外地重新转义一个已经转义的&(即不转换&amp;&amp;amp;&szlig;&amp;szlig;),你可以

import re
newstring = re.sub(r"&(?![A-Za-z])", "&amp;", oldstring)

&当它们后面跟着一个字母时,这将使s 不受影响。

于 2010-08-04T06:53:29.443 回答