Найти все ссылки без двоеточий Python

Рейтинг: 2Ответов: 1Опубликовано: 07.04.2023

Хочу собрать с Википедии все ссылки, которые не содержат двоеточий. Но при использовании регулярного выражения почему-то всё работает не так, как ожидалось.

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/">

В чём проблема?

Ответы

▲ 3Принят

Ваш 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')