Pythonで - リクエストクローラーに対する3つの解決策【中国語文字化け】

Requests は、比較的シンプルで使いやすい HTTP リクエスト ライブラリであり、Python でクローラー プログラムを作成するために最も基本的で一般的に使用されるライブラリです。
【中国語文字化け】問題は最も多く遭遇する問題であり、初心者にとっては非常に厄介です。
この記事では、Pythonでリクエストライブラリを使ってクローラープログラムを書くときに【中国語文字化け】が発生する原因と、よくある3つの解決策を詳しく解説します。

1. 【中国語文字化け】発生状況と発生理由

(1) 【中国語文字化け】例

まず、この記事でいう「中国語文字化け」とは、元のWebページの中国語コンテンツをリクエストで取得した結果、全く認識できなくなった状態を指し、\xや\などのエンコードの場合とは異なります。あなた。以下の例に示すように:
ここに画像の説明を挿入します
注:requests.get() メソッドは、サーバーの応答の内容を格納する応答オブジェクトを返します。

(2) 【中国語文字化け】が発生する原因

上の図の [中国語のコードが文字化けする] の理由:
リクエスト ライブラリを使用する場合、選択されたテキスト応答メソッドが不適切であり、コードに適切なエンコーディングが追加されないため、[ を使用して Web ページのエンコーディングが自動的に取得されます。 [response.text] は実際の Web ページのエンコーディングと一致しないため、[中国語の文字化けコード] が発生します。
リクエスト ライブラリを使用する場合、[response.text] はテキスト応答によく使用され、[response.content] は写真やビデオなどによく使用されます。
2 つの最大の違いは次のとおりです。
1. [response.text] は、HTTP ヘッダーに基づいて Web ページのエンコーディングを自動的に推測し、デコードして、デコードされたテキストを返します。
2. [response.content] はデコードされず、バイナリ形式で直接返されます。
次の表に示す 2 つのテキスト応答メソッド:

方法 意味
応答.テキスト サーバー応答の内容は、応答ヘッダーの文字エンコーディングに従って自動的にデコードされます。HTTP ヘッダーに基づいて応答のエンコーディングを経験に基づいて推測し、テキスト エンコーディングを推測します。戻り値の型: str; 一般的に使用される: 応答テキスト
応答.コンテンツ 応答本文はバイト単位であり、HTTP ヘッダーに基づいて応答エンコーディングについて根拠のある推測を行うことはできません。戻り値の型: バイト (バイナリ)、一般的に使用されるもの: 写真、ビデオ

2. 【中国語文字化け】の3つの対処法

(1) Webページテキストの取得方法を変更する

上記によると、既知の原因はテキストの取得方法が間違っていることですが、明らかに最も簡単で直接的な方法は、
response.text をresponse.content に直接置き換えることです。
ここに画像の説明を挿入します

(2) Web ページのエンコードを手動で指定してテキストを抽出する

上記によると、[response.text]を使用するとデコードされて返されることがわかっていますが、そのデコードが元のWebページのエンコードと一致せず、[中国語の文字化けコード]が発生することがわかっています。
応答には、返される Web ページのエンコーディングを指定するための [response.encoding] も提供されると考えられます。
したがって、解決策は次のとおりです:
通常のテキストを取得するために Web ページのエンコーディングを手動で指定します。
この方法は最初の方法よりも面倒です。
まず、元の Web ページの実際のエンコーディングを確認し、実際のエンコーディングに基づいて変更を加える必要があります。 Web ページのエンコーディング。1. Web ページのエンコードを確認する
Web ページのエンコードを確認するには 2 つの方法があります: (1) Web ページのソース コード (html) [Ctr+U] を直接開き、エンコードの値を確認します。 : [文字コード]。(2) 応答のエンコーディングと見かけのエンコーディングを使用して、Web ページのエンコーディングを取得します。エンコーディングと見かけのエンコーディングの最大の違い:エンコーディングはヘッダーから抽出されるのに対し、見かけのエンコーディングは Web ページのソース コードから解析されます。詳細は以下のとおりです。



ここに画像の説明を挿入します



属性 意味
応答.エンコーディング Web ページ応答のヘッダーから charset フィールドのエンコーディングを抽出します。ヘッダーに charset フィールドがない場合、デフォルトのエンコード モードは ISO-8859-1 です。ISO-8859-1 エンコードでは中国語を解析できず、これが中国語の文字化けの原因でもあります。
応答.apparent_encoding Web ページのコンテンツ (HTML ソース コード) から Web ページがどのようにエンコードされているかを分析します。したがって、apparent_encoding はエンコーディングよりも正確であり、取得されるのは元の Web ページの実際のエンコーディングです。

(1)のURLを例にとると、Webページの実際のエンコーディングは[GB2312]です。
エンコーディングおよび見かけのエンコーディング メソッドを使用すると、得られる結果に一貫性がありません。見かけのエンコーディングは、元の Web ページの実際のエンコーディングです。
ここに画像の説明を挿入します
2. テキストエンコーディングを手動で指定する
. 上記の方法に従って、元の Web ページの実際のエンコーディングを取得した後、コード内のテキストエンコーディング形式を手動で指定して、[中国語の文字化けコード] 問題を解決します
以下に示すように 2 つの書き方があり、いずれかを選択できます。
ここに画像の説明を挿入します

(3) テキスト取得後のトランスコード[中国語文字化け]

上記 2 つの解決策に加えて、Python に付属するエンコード方法を使用して、[中国語文字化け] コンテンツを再度トランスコードし、Web ページの実際のエンコード形式に変換することもできます。
トランスコーディング方法: encode('iso-8859-1').decode('encoding format')
上記の例のように、Web ページのエンコーディングは実際には「gb2312」であり、コードは次のように変更できます
ここに画像の説明を挿入します
。 pythonでリクエストライブラリを使ったクローラー【中国語文字化け】の原因とよくある3つの処理方法を紹介していますので参考にしてください。

-終わり

おすすめ

転載: blog.csdn.net/LHJCSDNYL/article/details/131755340