7

私が書いているスクレーパーについて助けが必要です。大学ランキングの表をかき集めようとしていますが、それらの学校のいくつかは、名前に外国の文字 (ä、ü など) が含まれるヨーロッパの大学です。まったく同じ方法で、外国の大学の別のサイトで別のテーブルをすでにスクレイピングしていますが、すべて正常に機能しています。しかし、何らかの理由で、現在のスクレイパーは外国語の文字を処理できません (そして、外国語の文字を解析する限り、2 つのスクレイパーはまったく同じです)。

物事を機能させるために私がやっていることは次のとおりです。

  1. ファイルの最初の行でエンコードを宣言します。

    # -*- coding: utf-8 -*-
    
  2. django.utils.encoding import smart_unicode からの django フレームワークからのスマート Unicode のインポートと使用

    school_name = smart_unicode(html_elements[2].text_content(), encoding='utf-8',        
    strings_only=False, errors='strict').encode('utf-8')
    
  3. smart_unicode 関数とチェーンされている場合は、上記のようにエンコード関数を使用します。他に何が間違っているのか考えられません。これらのスクレーパーを扱う前は、さまざまなエンコーディングについてあまり理解していなかったので、少し目を見張るものがありました。以下を読んでみましたが、まだこの問題を克服できません

エンコーディングでは、すべての文字に数字が割り当てられ、16 進数、2 進数などで表現できることを理解しています。エンコーディングが異なれば、サポートする言語の数も異なります (たとえば、ASCII は英語のみをサポートし、UTF-8 はすべてをサポートします)。 . しかし、文字が正しく印刷されるように、必要なすべてのことを行っているように感じます. どこが間違っているのかわからず、頭がおかしくなりそうです. 助けてください!!

4

3 に答える 3

2

Webページから情報を抽出するときは、ブラウザがそのようなことを行う方法と同様に、文字エンコードを決定する必要があります(HTTPヘッダーの分析、HTMLの解析metaによるタグの検索、場合によっては実際のデータに基づく推測、たとえば、見た目が何かの存在など)いくつかのエンコーディングのBOMのように)。うまくいけば、これを行うライブラリルーチンを見つけることができます。

いずれにせよ、すべてのWebサイトがutf-8でエンコードされていると期待するべきではありません。Iso-8859-1はまだ広く使用されており、一般に、iso-8859-1をutf-8であるかのように読み取ると、大きな混乱が発生します(ASCII以外の文字の場合)。

于 2012-06-05T12:24:43.527 に答える
1

requests ライブラリを使用している場合、HTTP ヘッダーに基づいてコンテンツが自動的にデコードされます。ページの HTML コンテンツを取得するのは非常に簡単です。

>>> import requests
>>> r = requests.get('https://github.com/timeline.json')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
于 2012-06-05T18:31:02.463 に答える
-1
于 2012-06-05T16:55:29.327 に答える