Отфильтровать теги beautifulsoup по содержанию аттрибута
Имеется условный html документ с различными тегами. Мне нужно получить текст из заголовков, текст из абзацев и картинки. Но картинки только определенного типа, у которых аттрибут src содержит текст "800.jpeg" То есть из картинок:
<img src="egtywgyugrwuygryurgyugwuygwyugruygrw__600.svg">
<img src="egtywgyugrwuygryurgyugwuygwyugruygrw__800.jpeg">
мне нужна только вторая.
Использую следующий код:
for item in BeautifulSoup(sample_html, 'lxml').find_all(["p", "h2", "h3", "img"]):
if item.name == 'h2':
print(item.getText(strip=True))
if item.name == 'h3':
print(item.getText(strip=True))
if item.name == 'p':
print(item.getText(strip=True))
if item.name == 'source':
Вопрос как сформулировать правило для картинки. Пробовал разные варианты с регулярками, но ничего не сработало.
Ответы (1 шт):
Автор решения: Danis
→ Ссылка
Можно обойтись без регулярок
Вначале получаем содержимое src потом с помощью среза получаем последние восемь элементов
def f(list_):
return [el for el in list_ if el.get("src")[-8:] == "800.jpeg"]
page = """
<img src="egtywgyugrwuygryurgyugwuygwyugruygrw__600.svg">
<img src="egtywgyugrwuygryurgyugwuygwyugruygrw__800.jpeg">
"""
soup = BeautifulSoup(page, "html.parser")
print(f(soup.find_all("img")))
Вывод:
[<img src="egtywgyugrwuygryurgyugwuygwyugruygrw__800.jpeg">]