PythonでキャプチャしたWebページが文字化けする原因と解決策
この記事では、Python クロールで文字化けした Web ページが発生する原因と解決策を紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。
Python2 を使用して Web ページをクロールすると、キャプチャされたコンテンツが文字化けして表示されることがよくあります。
これが発生する可能性が最も高いのは、エンコーディングの問題です。実行環境の文字エンコーディングが Web ページの文字エンコーディングと一致しません。
たとえば、utf-8 でエンコードされた Web サイトは Windows コンソール (gbk) にキャプチャされます。または、Mac/Linux ターミナル (utf-8) で gbk でエンコードされた Web サイトをスクレイピングします。ほとんどの Web サイトでは UTF-8 エンコーディングが使用されており、多くの人が Windows を使用しているため、この状況は非常に一般的です。
キャプチャしたコンテンツ内の英語、数字、記号は正しいように見えますが、文字化けが混在している場合は、基本的にこれが当てはまると判断できます。
#この問題を解決するには、Web ページのエンコード方式に従って結果を Unicode にデコードしてから出力します。 Web ページのエンコードが不明な場合は、次のコードを参照してください。
import urllib req = urllib.urlopen("http://some.web.site") info = req.info() charset = info.getparam('charset') content = req.read() print content.decode(charset, 'ignore')
「ignore」パラメータは、デコードできない文字を無視するために使用されます。
ただし、この方法は常に機能するとは限りません。もう 1 つの方法は、正規表現を使用して Web ページ コードのエンコード設定を直接照合することです。
<meta>
文字化けを引き起こすエンコードの問題に加えて、見落とされがちな別の状況があります。ターゲット Web ページでは gzip 圧縮が有効になっています 。 Web ページを圧縮すると、送信されるデータが少なくなり、より速く開くことができます。ブラウザで開くと、Web ページのヘッダー情報に基づいてブラウザが自動的に解凍します。ただし、コードを使用して直接取得することはできません。したがって、Web ページのアドレスを開くのは正しいのに、プログラムでアドレスを取得しないのはなぜなのか、混乱するかもしれません。私自身もこの問題に騙されたことがあります。
この状況では、キャプチャされたコンテンツがほとんどすべて文字化けしており、表示することさえできません。 Web ページで圧縮が有効になっているかどうかを確認し、それを解凍するには、次のコードを参照できます。import urllib import gzip from StringIO import StringIO req = urllib.urlopen("http://some.web.site") info = req.info() encoding = info.getheader('Content-Encoding') content = req.read() if encoding == 'gzip': buf = StringIO(content) gf = gzip.GzipFile(fileobj=buf) content = gf.read() print content教室でのプログラミングのサンプル天気予報シリーズ (クリックして表示) では、これらのコードを参照できます。 2つの問題で悩んでいる人は少なくありません。ここで特別に説明しておきます。 最後に、もう一つ「鋭い武器」を紹介します。最初から使っていると、上記の2つの問題が存在することさえわかりません。 これは
requests モジュールです。
同様に Web ページをクロールします。必要なのは次のことだけです。import requests print requests.get("http://some.web.site").textエンコードの問題や圧縮の問題はありません。 これが私が Python を愛する理由です。リクエスト モジュールのインストール方法については、前の記事を参照してください:Python のサードパーティ モジュールをインストールする方法-クロッシンのプログラミング教室- 志胡コラム
pip install requests
以上がPythonでキャプチャしたWebページが文字化けする原因と解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Stock Market GPT
AIを活用した投資調査により賢明な意思決定を実現

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

REモジュールを介してPythonに正規表現が実装され、文字列が検索、マッチング、操作されます。 1。Re.Search()を使用して、文字列全体で最初の一致を見つけます。Re.Match()は、文字列の開始時にのみ一致します。 2。ブラケット()を使用して、読みやすさを向上させるために名前が付けられる一致するサブグループをキャプチャします。 3。Re.Findall()はすべての非重複マッチを返し、Re.Finditer()は一致するオブジェクトの反復ターを返します。 4。Re.sub()は、一致するテキストを置き換え、動的関数の交換をサポートします。 5.一般的なパターンには\ d、\ w、\ sなどが含まれます。Re.ignoreCase、re.Multiline、Re.Dotall、reを使用できます。

リモートPythonアプリケーションをデバッグするには、Debugpyを使用してポート転送とパスマッピングを構成する必要があります。まず、リモートマシンにDebugpyをインストールし、コードを変更してポート5678を聴き、SSHトンネルを介してリモートポートをローカルエリアに転送し、Vscodeの発射で「AttachToreMotepython」を構成し、ローカルドロートとレモートのポスフォースを正しく設定します。最後に、アプリケーションを開始し、デバッガーに接続して、リモートブレークポイントのデバッグ、可変チェック、コードステッピングを実現します。プロセス全体は、デバッグの安全なポート転送と正確なパスマッチングに依存します。

sursepythonisinstalledbyrunningpython - versionorpython3-- versionintheterminal; ifnotinstalled、downloadfrompython.organdaddtopath.2.insublimetext、gototools> buildsystem> newbuildsystem、aglectecontentwith {"

Pythonスクリプトを実行するには、sublimetextのビルドシステムを構成する必要があります。 2. sublimetextで新しいビルドシステムを作成し、{"cmd":["python"、 "-u"、 "$ file"]、 "file_regex": "^[] file \"(...?)\ "、line(qu Quie(0-9]*)"、 "selector": "^[] file \"(...?)\ "を入力します。

2つ以上のリストの一般的な要素を見つける最も効率的な方法は、セットの交差操作を使用することです。 1。リストをセットに変換し、&operatorまたは.intersection()メソッドを使用して、たとえば、common = list(set(list1)&set(list2)); 2。複数のリストの場合、set(list1).intersection(set(list2)、set(list3))またはset.intersection(*map(set、list))を使用して動的処理を実現できます。 3.無秩序で自動的な重複排除に注意してください。注文を維持する必要がある場合は、元のリストを通過して、設定された判断を組み合わせることができます。

abstruteimportsspecifytheTheTheTheTheTop-LevelPackage、whiLERELATIVESTOREMORTIMPORTSORECTORECTORECTORECTORESRESRESRESTOTHECURRENTPACKAGE;

selferforstotheinStance faclassusedisusedSustance-datifificattributeds;

モジュールレベルのインスタンスを使用することは、Python習慣に最もシンプルで最も単純です。モジュール内のクラスインスタンスを定義することにより、Pythonモジュールの機能を1回だけ使用して、config.pyファイルの作成やconfigインスタンスの定義など、グローバルな一意性を確保します。他のモジュールは、インポートするときに同じオブジェクトを共有します。この方法はシンプルで、読みやすく、スレッドセーフであり、ほとんどの実用的なシナリオに適しています。さらに、__new__メソッドを書き換えて、デコレーター、メタクラスなどを使用して実装することもできます。ここで、__new__メソッドはクラス変数を通じてインスタンスの独自性を制御しますが、安全性の問題に注意を払います。デコレーター法はクラス全体で再利用できますが、ゴミ収集に影響を与える可能性があります。 Metaclassメソッドは、継承と集中制御が複製されますが複製をサポートします。
