Извлечение domain из url
Мой код:
import re
domain = re.match('\/\/(.*?)\/', 'https://ru.stackoverflow.com/questions')
print(domain)
Ожидаемый результат:
ru.stackoverflow.com
Печатает None, в чем ошибка?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Из описания функции match: "Try to apply the pattern at the start of the string". Он ищет совпадение с начала строки. Вот так уже ищется, если указать, что до вашего шаблона могут быть произвольные символы:
domain = re.match('.*\/\/(.*?)\/', 'https://ru.stackoverflow.com/questions')
^^
Вывод:
<re.Match object; span=(0, 29), match='https://ru.stackoverflow.com/'>
Ну или используйте findall:
domain = re.findall('\/\/(.*?)\/', 'https://ru.stackoverflow.com/questions')
Вывод:
['ru.stackoverflow.com']
А вообще URL-и нужно парсить специальными библиотеками, уж больно много там особенностей может быть, все их довольно сложно предусмотреть:
from urllib.parse import urlparse
print(urlparse('https://ru.stackoverflow.com/questions'))
Вывод:
ParseResult(scheme='https', netloc='ru.stackoverflow.com', path='/questions', params='', query='', fragment='')