0

我正在尝试使用 Python 的漂亮汤 Python 解析器解析网页,但遇到了问题。

我们从它们那里得到的 HTML 的标头声明了一个 utf-8 字符集,所以 Beautiful Soup 将整个文档编码为 utf-8,实际上 HTML 标签是用 UTF-8 编码的,所以我们得到了一个结构良好的 HTML 页面。

麻烦的是,这个愚蠢的网站将 gb2312 编码的正文文本注入到被美丽汤解析为 utf-8 的页面中。有没有办法将文本从这种“gb2312 伪装成 utf-8”状态转换为“utf-8 中字符集的正确表达”?

4

1 回答 1

1

最简单的方法可能是解析页面两次,一次为 UTF-8,一次为 GB2312。然后从 GB2312 解析中提取相关部分。

我对 GB2312 了解不多,但查找它似乎至少与基本字母、数字等上的 ASCII 一致。所以你应该仍然能够使用 GB2312 解析 HTML 结构,希望能给你足够的信息以提取您需要的部分。

实际上,这可能是唯一的方法。一般来说,GB2312 编码的文本不是有效的 UTF-8,因此尝试将其解码为 UTF-8 会导致错误。BeautifulSoup 文档说:

在极少数情况下(通常当 UTF-8 文档包含以完全不同的编码编写的文本时),获得 Unicode 的唯一方法可能是将某些字符替换为特殊的 Unicode 字符“REPLACEMENT CHARACTER”(U+FFFD,�)。如果 Unicode,Dammit 需要这样做,它会将 UnicodeDammit 或 BeautifulSoup 对象上的 .contains_replacement_characters 属性设置为 True。

这听起来像是 BeautifulSoup 只是忽略了解码错误并用 U+FFFD 替换了错误的字符。如果是这种情况(即,如果您的文档有contains_replacement_characters == True),那么一旦将原始数据解码为 UTF-8,就无法从文档中取回原始数据。您将不得不执行我上面建议的操作,使用不同的编解码器对整个文档进行两次解码。

于 2012-08-01T20:50:45.820 回答