Мне нужно разобрать URL. В настоящее время я использую urlparse.urlparse() и urlparse.urlsplit().
Проблема в том, что я не могу получить "netloc" (хост) из URL-адреса, когда он не представляет схему. Я имею в виду, если у меня есть следующий URL-адрес:
www.amazon.com/Programming-Python-Mark-Lutz/dp/0596158106/ref=sr_1_1?ie=UTF8&qid=1308060974&sr=8-1
Я не могу получить netloc: www.amazon.com
В соответствии с документами python:
Следуя спецификациям синтаксиса в RFC 1808, urlparse распознает netloc только если оно правильно введено "//. В противном случае предполагается, что вход быть относительным URL-адресом и, таким образом, начинать с компонентом пути.
Итак, это так нарочно. Но я все еще не знаю, как получить netloc с этого URL.
Я думаю, что могу проверить, присутствует ли схема, а если нет, добавьте ее и затем проанализируйте. Но это решение кажется не очень хорошим.
У вас есть идея?
EDIT: Спасибо за ответы на все вопросы. Но я не могу сделать "startswith" вещь, предложенную Кори и другими. Если я получаю URL-адрес с другим протоколом/схемой, я бы испортил его. См:
Если я получаю этот URL-адрес:
ftp://something.com
С предлагаемым кодом я добавлю "http://" в начало и испортил бы его.
Решение, которое я нашел
if not urlparse.urlparse(url).scheme:
url = "http://"+url
return urlparse.urlparse(url)
Что-то примечание:
Сначала выполняю некоторую проверку, и если никакая схема не указана, я считаю ее http://