Отфильтровать теги 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">]
→ Ссылка