Pythonでurl内にascii外の文字が含まれているときの対処法
クローラーを作っているときにurl内にutf8があってさあ困った。
やることは、
- ascii外の文字を検出すること
- 検出した上でutf8 to asciiにすること
の2点。
上記のstackoverflowにasciiかどうか判別するsampleがあったのでこれを使うことに。
def is_ascii(s): return all(ord(c) < 128 for c in s)
すごくシンプルな書き方で好きですね。
でもって、utf8 to asciiにする方法ですが、urllibモジュールでできそうな感じがしていて、
if not is_ascii(url): parsed_link = urllib.parse.urlsplit(url.encode('utf8')) # pathの場合(quoteならpathをquoteへ) parsed_link = parsed_link._replace(path=urllib.parse.quote(parsed_link.path)) url = parsed_link.geturl()
みたいにしました。もともとutf8なら2行目の.encodeはいらないので削除してもらって構わないです。
という感じで乗り切りました。