Регулярные выражения для доменных имён
Дана строка вида:
s = """
<a href="http://stepic.org/courses">
<a href='https://stepic.org'>
<a href='http://neerc.ifmo.ru:1345'>
<a href="ftp://mail.ru/distib" >
<a href="ya.ru">
<a href="www.ya.ru">
<a href="../skip_relative_links">
"""
С помощью регулярных выражений вывести доменные имена сайтов
Вот мой код:
import re
s = """
<a href="http://stepic.org/courses">
<a href='https://stepic.org'>
<a href='http://neerc.ifmo.ru:1345'>
<a href="ftp://mail.ru/distib" >
<a href="ya.ru">
<a href="www.ya.ru">
<a href="../skip_relative_links">
"""
obj = r"<a.*://([\w.]+)"
it = re.findall(obj,s)
print(*it,sep="\n")
Но он не все доменные имена выводит. КАК исправить мой код, чтобы он выводил доменные имена по образу:
mail.ru
neerc.ifmo.ru
stepic.org
www.ya.ru
ya.ru
Ответы (2 шт):
Автор решения: Алексей Р
→ Ссылка
Попробуйте так.
obj = r"(?:\/\/|[\"'])([\w-]+(?:\.[\w-]+)+)"
it = re.findall(obj, s)
print(*it, sep="\n")
stepic.org
stepic.org
neerc.ifmo.ru
mail.ru
ya.ru
www.ya.ru
Автор решения: Василий Калеев
→ Ссылка
Разобрался сам и все получилось:
import requests, re
a=input()
res = requests.get(a)
s=str(res.text)
it=[]
pattern = r'<a.*?href=".*?:\/\/((?:\w|-)+(?:\.(?:\w|-)+)+)'
it = re.findall(pattern,s)
mn=[]
for i in sorted(it):
if i not in mn:
mn.append(i)
print(*mn,sep="\n")