ごはんと飲み物は紙一重

Pythonを中心とした、データ分析や機械学習・深層学習関連の記事を書いてます。あとは気まぐれで書く日記や大学のことなどなど・・・

Pythonでurl内にascii外の文字が含まれているときの対処法

クローラーを作っているときにurl内にutf8があってさあ困った。

やることは、

  • ascii外の文字を検出すること
  • 検出した上でutf8 to asciiにすること

の2点。

stackoverflow.com

上記の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はいらないので削除してもらって構わないです。

という感じで乗り切りました。