我正在抓取一个包含在浏览器中看起来像这样的 HTML 的网页
<td>LGG® MAX multispecies probiotic consisting of four bacterial trains</td>
<td>LGG® MAX helps to reduce gastro-intestinal discomfort</td>
仅以 LGG® 为例,第一个实例是
LGG®
在第二个实例中,® 在源代码中写为 ®
。我正在使用 Python 2.7、机械化和 BeautifulSoup。
我的难点是
®
被机械化提升,并通过并最终打印出来或写入文件。还有许多其他特殊字符。有些在输出时被“转换”,而 ® 被转换为困惑。
该网页被声明为 UTF-8,我对编码的唯一引用是当我打开我的输出文件时。我已经声明了 UTF-8。如果我不写其他角色的文件炸弹。
我正在使用 Windows 7。其他详细信息:
>>> sys.getdefaultencoding()
'ascii'
>>> sys.stdout.encoding
'cp850'
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')
>>>
谁能给我任何关于处理特殊字符的最佳方法的提示?或者它们应该被称为 HTML 实体?这一定是一个相当普遍的问题,但我无法在网上找到任何直接的解释。
更新:我在这里取得了一些进展。
基本算法是
这个预处理阶段到底是做什么的。
除了特殊字符的处理之外,有序。
长单元格条目中的标点符号并允许导入
Excel 等
进度在第 3 阶段。我使用了一些正则表达式和 htmlentityrefs 来逐个单元格条目更改代码单元格条目。见 this blog post 。
剩下的困难:写入文件(并打印到屏幕)的代码仍然不正确,但现在问题似乎是正确指定编码的问题。至少这个问题似乎更小了。
最佳答案
从标题回答问题:
# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulSoup
html = u"""
<td>LGG® MAX multispecies probiotic consisting of four bacterial trains</td>
<td>LGG® MAX helps to reduce gastro-intestinal discomfort</td>
"""
soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
print(''.join(soup('td', text=True)))
输出
LGG® MAX multispecies probiotic consisting of four bacterial trains
LGG® MAX helps to reduce gastro-intestinal discomfort
关于Python, BeautifulSoup : ® - how to convert to proper regmark,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8751147/