我正在抓取一个html页面,然后使用xml.dom.minidom.parseString()创建一个dom对象。
然而,html页面有一个'&'。我可以使用cgi.escape将其转换为&
,但它也会转换我的所有html&lt;&gt;标记到<>
,这使得parseString()不满意。
我该如何解决这个问题?我宁愿不只是破解它而直接取代“&amp;”s
感谢
答案 0 :(得分:1)
呃,为什么?这就是我宁愿不只是破解它 直接取代“&amp;”s
cgi.escape
正在做的事情 - 实际上只是对必须转义的某些字符的搜索和替换操作。
如果您只想替换单个字符,只需替换单个字符:
yourstring.replace('&', '&')
不要在灌木丛中殴打。
答案 1 :(得分:1)
对于抓取,请尝试使用可以处理此类html“标记汤”的库,例如lxml,其中包含html parser(以及lxml.html中的专用html包),或{ {3}}(您还会发现这些库还包含其他能够更轻松地使用html进行抓取/处理的内容,除了能够处理格式错误的文档:从表单中获取信息,使用css选择器创建绝对超链接。 ..)
答案 2 :(得分:0)
如果您想确保不会意外地将已经转义的&
(即未转换为&
转换为&amp;
或ß
转换为{{ 1}}),你可以
&szlig;
当import re
newstring = re.sub(r"&(?![A-Za-z])", "&", oldstring)
后面跟着一封信时,这将留下&
。
答案 3 :(得分:0)
您不应使用XML解析器来解析非XML的数据。相反,找一个HTML解析器,从长远来看,你会更快乐。标准库有一些(HTMLParser和htmllib),而BeautifulSoup是一个备受喜爱的第三方包。