【发布时间】:2012-02-03 18:54:18
【问题描述】:
我正在抓取一个网页,其中包含在浏览器中看起来像这样的 HTML
<td>LGG® MAX multispecies probiotic consisting of four bacterial trains</td>
<td>LGG® MAX helps to reduce gastro-intestinal discomfort</td>
仅以 LGG® 为例,第一个实例是 LGG&reg; 在第二个实例中,® 在源代码中写为 ®。
我正在使用 Python 2.7、mechanize 和 BeautifulSoup。
我的难点是&reg;被机械化提升,并被执行,最终被打印出来或写入文件。
还有许多其他特殊字符。有些在输出上被“转换”,而® 被转换为混乱。
网页被声明为 UTF-8,我对编码的唯一参考是当我打开我的输出文件时。我已经声明了 UTF-8。如果我不在其他角色上写入文件炸弹。
我正在使用 Windows 7。其他详细信息:
>>> sys.getdefaultencoding()
'ascii'
>>> sys.stdout.encoding
'cp850'
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')
>>>
谁能给我一些关于处理特殊字符的最佳方法的提示?还是应该将它们称为 HTML 实体?这一定是一个相当普遍的问题,但我无法在网上找到任何直截了当的解释。
更新:我在这里取得了一些进展。 基本算法是
- 在 mechanize 中阅读网页
- 用漂亮的汤做什么..我写下来我不知道 这个预处理阶段到底是做什么用的。
- 使用漂亮的汤从表中提取信息 除了特殊字符的处理之外,有序。
- 将信息写入由 | 分隔的文件占 长单元格条目中的标点符号并允许导入 Excel 等
进度处于第 3 阶段。我使用了一些正则表达式和 htmlentityrefs 逐个单元格条目来更改代码单元格条目。见this blog post。
剩余的困难:写入文件(并打印到屏幕)的代码仍然不正确,但问题现在似乎是正确指定编码的问题。至少问题看起来更小了。
【问题讨论】:
-
有一个关于标记系统如何工作的页面:stackoverflow.com/editing-help 当您编辑某些内容时,它是从右上角的问号链接的。
-
转换html实体你可以使用
unescape()function
标签: python beautifulsoup html-entities