我正在用Beautiful Soup 3解析一些HTML,但它包含了Beautiful Soup 3不会自动解码的HTML实体:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<p>£682m</p>")
>>> text = soup.find("p").string
>>> print text
£682m
我如何解码文本中的HTML实体以获得“6.82亿英镑”而不是“&英镑;6.82亿”。
我也有类似的编码问题。我使用normalize()方法。当我将数据帧导出到另一个目录中的.html文件时,我使用pandas .to_html()方法得到一个Unicode错误。我最终这么做了,而且成功了……
import unicodedata
dataframe对象可以是任何你喜欢的东西,我们叫它table…
table = pd.DataFrame(data,columns=['Name','Team','OVR / POT'])
table.index+= 1
对表格数据进行编码,以便我们可以将其导出到模板文件夹中的。html文件(这可以是您希望的任何位置:))
#this is where the magic happens
html_data=unicodedata.normalize('NFKD',table.to_html()).encode('ascii','ignore')
导出规范化字符串到HTML文件
file = open("templates/home.html","w")
file.write(html_data)
file.close()
参考:unicodedata文档
Beautiful Soup 4允许您为输出设置格式化程序
如果传入formatter=None, Beautiful Soup将不会修改字符串
完全没有输出。这是最快的选择,但它可能会导致
Beautiful Soup生成无效的HTML/XML,如以下示例所示:
print(soup.prettify(formatter=None))
# <html>
# <body>
# <p>
# Il a dit <<Sacré bleu!>>
# </p>
# </body>
# </html>
link_soup = BeautifulSoup('<a href="http://example.com/?foo=val1&bar=val2">A link</a>')
print(link_soup.a.encode(formatter=None))
# <a href="http://example.com/?foo=val1&bar=val2">A link</a>