ホームページ バックエンド開発 Python チュートリアル PythonでキャプチャしたWebページが文字化けする原因と解決策

PythonでキャプチャしたWebページが文字化けする原因と解決策

Mar 16, 2019 am 10:13 AM
python

この記事では、Python クロールで文字化けした Web ページが発生する原因と解決策を紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。

Python2 を使用して Web ページをクロールすると、キャプチャされたコンテンツが文字化けして表示されることがよくあります。

これが発生する可能性が最も高いのは、エンコーディングの問題です。実行環境の文字エンコーディングが Web ページの文字エンコーディングと一致しません。

たとえば、utf-8 でエンコードされた Web サイトは Windows コンソール (gbk) にキャプチャされます。または、Mac/Linux ターミナル (utf-8) で gbk でエンコードされた Web サイトをスクレイピングします。ほとんどの Web サイトでは UTF-8 エンコーディングが使用されており、多くの人が Windows を使用しているため、この状況は非常に一般的です。

キャプチャしたコンテンツ内の英語、数字、記号は正しいように見えますが、文字化けが混在している場合は、基本的にこれが当てはまると判断できます。

PythonでキャプチャしたWebページが文字化けする原因と解決策

#この問題を解決するには、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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PythonのREモジュールで正規表現を使用する方法は? PythonのREモジュールで正規表現を使用する方法は? Aug 22, 2025 am 07:07 AM

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を使用できます。

VSCODEでリモートPythonアプリケーションをデバッグする方法 VSCODEでリモートPythonアプリケーションをデバッグする方法 Aug 30, 2025 am 06:17 AM

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

崇高なテキストでPythonを構築して実行する方法は? 崇高なテキストでPythonを構築して実行する方法は? Aug 22, 2025 pm 03:37 PM

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

Sublime Text ConsoleでPythonを実行する方法は? Sublime Text ConsoleでPythonを実行する方法は? Aug 22, 2025 pm 03:55 PM

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

Pythonの2つ以上のリストの間に共通の要素をどのように見つけますか? Pythonの2つ以上のリストの間に共通の要素をどのように見つけますか? Aug 27, 2025 am 05:27 AM

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

Pythonの絶対的なインポートと相対的なインポートの違いは何ですか? Pythonの絶対的なインポートと相対的なインポートの違いは何ですか? Aug 29, 2025 am 05:25 AM

abstruteimportsspecifytheTheTheTheTheTop-LevelPackage、whiLERELATIVESTOREMORTIMPORTSORECTORECTORECTORECTORESRESRESRESTOTHECURRENTPACKAGE;

Pythonでの自己の使用は何ですか Pythonでの自己の使用は何ですか Aug 22, 2025 am 07:57 AM

selferforstotheinStance faclassusedisusedSustance-datifificattributeds;

PythonでSingletonデザインパターンを実装する方法 PythonでSingletonデザインパターンを実装する方法 Sep 01, 2025 am 04:25 AM

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

See all articles