urlparse не работает с простым URL - PullRequest
0 голосов
/ 24 мая 2018

этот простой код заставляет urlparse сойти с ума, и он не получает имя хоста должным образом, но устанавливает его на None:

from urllib.parse import urlparse
parsed = urlparse("google.com/foo?bar=8")
print(parsed.hostname)

Я что-то упустил?

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Просто чтобы добавить дополнительный контекст к ответу Муада.Посмотрите на вывод этих двух вариантов, используя urlparse:

>>> parsed = urlparse("google.com/foo?bar=8")
>>> parsed
ParseResult(scheme='', 
            netloc='', 
            path='google.com/foo', 
            params='', 
            query='bar=8', 
            fragment='')

И с указанием полного пути

>>> parsed = urlparse("http://google.com/foo?bar=8")
>>> parsed
ParseResult(scheme='http', 
            netloc='google.com', 
            path='/foo', 
            params='', 
            query='bar=8', 
            fragment='')
0 голосов
/ 24 мая 2018

google.com/foo?bar=8 - это относительный URL, называемый «путь» с «запросом».Возможно, вы видите google.com в качестве имени хоста, но это не обязательно (и как бы Python узнал?)

URL-адреса состоят из протокола или схемы ('https:', 'ftp:' и т. Д..), хост ('//example.com'), путь, запрос, фрагмент.

Таким образом, urlparse делает лучшее предположение, возвращая None для протокола и хоста.

0 голосов
/ 24 мая 2018

Для того, чтобы это работало правильно, вы должны включить идентификатор протокола (http://).. Вот что у меня сработало:

parsed = urlparse("https://www.google.com/foo?bar=8")
print(parsed.hostname)

. Вывод был: www.google.com (что кажется ожидаемым).Подробнее о том, как использовать urlparse , можно прочитать здесь .

Надеюсь, это поможет вам!

...