0

私はこの問題に遭遇した最初の人ではないと確信しています。しかし、何時間もデバッグ、グーグル、StackOverflowを行った後、答えが見つからなかったので、この質問を投稿することにしました。何か見落としていたら事前に申し訳ありませんが、今ではかなり混乱しています。

私はBeautifulSoupを使用してUTF-8Webサイトを解析しています。Webサイトのテキストを使用して、さらにクロールするURLを作成しています。英語以外の文字で問題が発生しています。

例:サイトに文字列が含まれていて、Originální formuleそれを使用してURLを作成したい:http://blahblah.com/Originální-formuleまたはhttp://blahblah.com/origin%C3%A1ln%C3%AD-formule。問題は、http://blahblah.com/Origin\xe1ln\xed-formuleエラーが発生するということです。エンコード、デコードなどを試みましたが、それでも適切なURLを取得できません。

ところで、私print u'Origin\xe1ln\xed-formule'がすると、文字列はうまく印刷されます。成功しないのはエンコーディングだけです。

私は何が間違っているのですか?

4

1 に答える 1

1

あなたが期待していることを達成するために、あなたは以下のことをしなければなりません:

  1. URLを分解します
  2. パス部分を取得し、utf-8にエンコードします
  3. パスを引用する
  4. 各部分に参加して、引用されたURLを取り戻します

これらは、次の機能を組み合わせて実行できます。

コードは次のようになります。

from urlparse import urlparse, urlunparse
from urllib import quote
x = u'http://blahblah.com/Originální-formule'
parsed_url = list(urlparse(x.encode('utf-8')))
parsed_url[2] = quote(parsed_url[2])
urlunparse(parsed_url)

結果:http://blahblah.com/Origin%C3%A1ln%C3%AD-formule

于 2012-08-08T11:37:20.460 に答える