Найти все ссылки без двоеточий Python
Хочу собрать с Википедии все ссылки, которые не содержат двоеточий. Но при использовании регулярного выражения почему-то всё работает не так, как ожидалось.
html = request.urlopen('https://ru.wikipedia.org/wiki/')
soup = BeautifulSoup(html, 'lxml')
all_links = soup.find_all('a', {'href': re.compile('[^:]')})
Пример одного из элементов all_links
<a href="https://www.mediawiki.org/">
В чём проблема?
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Ваш regex справедлив для всех строк, в которых хотя бы 1 символ не равен :. Для того, чтобы переписать условие как "вся строка не содержит :", можно добавить в него "якори" начала и конца строки, а также добавить квантификатор + (один или более символов).
from urllib.request import urlopen
import re
from bs4 import BeautifulSoup
html = urlopen('https://ru.wikipedia.org/wiki/')
soup = BeautifulSoup(html, 'lxml')
all_links = soup.find_all('a', {'href': re.compile('^[^:]+$')})
print(*all_links, sep='\n')