0

Pythonの美しいスープPythonパーサーを使用してWebページを解析しようとしていますが、問題が発生しています。

それらから取得したHTMLのヘッダーはutf-8文字セットを宣言しているため、Beautiful Soupはドキュメント全体をutf-8でエンコードし、実際にHTMLタグはUTF-8でエンコードされているため、適切に構造化されたHTMLページが返されます。

問題は、このばかげたWebサイトが、美しいスープによってutf-8として解析されるページにgb2312でエンコードされた本文テキストを挿入することです。この「utf-8のふりをしているgb2312」状態から「utf-8で設定された文字セットの適切な表現」にテキストを変換する方法はありますか?

4

1 に答える 1

1

最も簡単な方法は、ページを2回解析することです。1回はUTF-8として、もう1回はGB2312として解析します。次に、GB2312解析から関連するセクションを抽出します。

GB2312についてはよくわかりませんが、調べてみると、基本的な文字や数字などについては少なくともASCIIと一致しているようです。したがって、GB2312を使用してHTML構造を解析できるはずです。これで、十分な情報が得られると思います。必要な部分を抽出するための情報。

実際には、これが唯一の方法かもしれません。一般に、GB2312でエンコードされたテキストは有効なUTF-8ではないため、UTF-8としてデコードしようとするとエラーが発生するはずです。BeautifulSoupのドキュメントには次のように書かれています。

まれに(通常、UTF-8ドキュメントに完全に異なるエンコーディングで記​​述されたテキストが含まれている場合)、Unicodeを取得する唯一の方法は、一部の文字を特殊なUnicode文字「REPLACEMENTCHARACTER」(U + FFFD、�)に置き換えることです。Unicodeの場合、Dammitはこれを行う必要があり、UnicodeDammitまたはBeautifulSoupオブジェクトで.contains_replacement_characters属性をTrueに設定します。

これにより、BeautifulSoupはデコードエラーを無視し、エラーのある文字をU+FFFDに置き換えるように聞こえます。これが当てはまる場合(つまり、ドキュメントにが含まれている場合contains_replacement_characters == True)、UTF-8としてデコードされた後、ドキュメントから元のデータを取得する方法はありません。異なるコーデックを使用してドキュメント全体を2回デコードし、上記で提案したようなことを行う必要があります。

于 2012-08-01T20:50:45.820 に答える