最も簡単な方法は、ページを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回デコードし、上記で提案したようなことを行う必要があります。