ホームページ > バックエンド開発 > Python チュートリアル > Python が Web ページをクロールする際の文字セット変換問題の解決策の共有

Python が Web ページをクロールする際の文字セット変換問題の解決策の共有

WBOY
リリース: 2016-06-16 08:43:41
オリジナル
1288 人が閲覧しました

質問:

Web ページを収集し、処理後に文字列をファイルに保存するか、データベースに書き込むことがあります。このとき、収集した Web ページのエンコーディングが gb2312 である場合、文字列のエンコーディングを指定する必要があります。データベースはutf-8です。何も処理せずにデータベースに直接挿入すると文字化けが発生する可能性があります(テストしていないため、データベースが自動的にトランスコードするかどうかはわかりません)。gb2312を手動で変換する必要があります。 utf-8にします。

まず、Python の文字はデフォルトで ASCII コードであることを知っています。もちろん、英語は問題ありません。中国語に遭遇すると、すぐにひざまずきます。

まだ覚えているかどうかはわかりませんが、Python で漢字を出力するときは、文字列の前に u を追加する必要があります。

print u"来搞基吗?"
ログイン後にコピー

このようにして、中国語を表示することができます。ここでの u の機能は、中国語を正しく表示できるように、次の文字列を Unicode コードに変換することです。
それに関連する unicode() 関数があり、その使用法は次のとおりです

str="来搞基"
str=unicode(str,"utf-8")
print str
ログイン後にコピー

と u の違いは、str を Unicode エンコードに変換するために Unicode が使用されることです。ここでの utf-8 は、test.py スクリプト自体のファイル文字セットです。アンシになる。
Unicode がキーです。以下に進みます

Baidu ホームページのクロールを開始します。訪問者が Baidu ホームページにアクセスして Web ページのソース コードを表示すると、その charset=gb2312 が表示されます。

import urllib2
def main():
  f=urllib2.urlopen("http://www.baidu.com")
  str=f.read()
  str=unicode(str,"gb2312")
  fp=open("baidu.html","w")
  fp.write(str.encode("utf-8"))
  fp.close()

if __name__ == '__main__' :
  main()
ログイン後にコピー

説明:
まず、urllib2.urlopen() メソッドを使用して Baidu ホームページを取得します。f はハンドルで、str=f.read() を使用してすべてのソース コードを str

に読み取ります。

明らかに、str には取得した HTML ソース コードが含まれています。Web ページのデフォルトの文字セットは gb2312 であるため、それをファイルに直接保存すると、ファイル エンコーディングは ansi になります。

ほとんどの人にとって、これで十分ですが、場合によっては gb2312 を utf-8 に変換したい場合もあります。

最初:
str=unicode(str,"gb2312") #ここでの gb2312 は str の実際の文字セットです。これを Unicode に変換します

その後:
str=str.encode("utf-8") #Unicode文字列をutf-8に再エンコードします

最後に:

ファイルに str を書き込み、ファイルを開いてエンコーディングのプロパティを確認すると、それが utf-8 であることがわかります。utf-8 のトランスコーディングが完了しました。


概要:

指定した文字セットに従って文字列を保存する必要がある場合は、次の手順があることを確認してください:

1: unicode(str, "元のエンコーディング") を使用して str を Unicode 文字列にデコードします

2: str.encode("指定された文字セット") を使用して、Unicode 文字列 str を指定した文字セットに変換します

3: str をファイルに保存するか、データベースに書き込みます。当然、エンコーディングはすでに指定されていますよね。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート