urllib
on принимает действительные URL-адреса, поэтому вам необходимо исправить это заранее.
URL-адресов может содержать только графических c печатаемых символов США- Набор кодированных символов ASCII . Чтобы включить другие символы в URL-адрес, они должны быть сначала закодированы с помощью punycode и / или процентное кодирование . Браузеры делают это автоматически. Так же как и модуль Requests
, который я настоятельно рекомендую использовать вместо urllib
.
См .:
Каждая часть net_lo c должен быть закодирован Punycode (включая каждую метку домена , которая составляет хост ). path , params и query должны кодироваться в процентах (с urllib.parse.quote()
.
В вашем простом случае 医疗器械耗材.cn
net_lo c, и нет path , params или query .
Заменить это строка (url2 = urllib.parse.quote(url2, safe=string.printable)
) с:
import encodings.idna
url2 = ".".join(encodings.idna.ToASCII(label).decode("ascii") for label in url2.split("."))
url2
теперь xn--ekru7e84uhjb2x6a40o.cn
, и urllib
больше не будет жаловаться.