URLをUnicodeからバイトストリングにエンコードする必要があります。2種類のオブジェクトを生成しますu''
。Unicode文字列とバイト文字列。r''
このメソッドを使用してUnicode文字列をバイトコードにエンコードでき.encode()
ますが、使用するエンコードを知っておく必要があります。通常、URLの場合、UTF-8は優れていますが、URLスキームに合わせてバイトをエスケープする必要もあります。
import urlparse, urllib
parts = list(urlparse.urlsplit(url))
parts[2] = urllib.quote(parts[2].encode('utf8'))
url = urlparse.urlunsplit(parts)
上記の例は、あなたが直面している問題はURLのパス部分の非ASCII文字が原因であるという知識に基づいた推測に基づいていますが、それ以上の詳細がなければ推測のままにする必要があります。
ドメイン名については、 IDNARFC3490エンコーディングを適用する必要があります。
parts = list(urlparse.urlsplit(url))
parts[1] = parts[1].encode('idna')
parts = [p.encode('utf8') if isinstance(p, unicode) else p for p in parts]
url = urlparse.urlunsplit(parts)
詳細については、PythonUnicodeHOWTOを参照してください。また、エンコーディングに関する優れた入門書として、Joel onSoftwareUnicodeの記事を読むことを強くお勧めします。