Не удается получить содержимое различных тегов "h" с помощью селектора. - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь получить разные заголовки из нескольких тегов h из некоторых HTML-элементов.К тегам h всегда прикреплены некоторые цифры, например, h1, h14, h17.Я знаю, что могу использовать .select("h1,h11,h9") для их извлечения, но их много.Я мог бы обработать их, используя .select("[class^='heading']"), если бы они были что-то вроде class="heading1", class="heading2", class="heading3".

Как получить все содержимое различных тегов h с помощью селектора?

Моя попытка:

htmlelements="""
<h1>
    <a href="https://somesite.com/">SEC fight</a>
</h1>
<h11>
    <a href="https://somesite.com/">AFC fight</a>
</h11>
<h9>
    <a href="https://somesite.com/">UTY fight</a>
</h9>
"""

from bs4 import BeautifulSoup

page = BeautifulSoup(htmlelements, "lxml")
for item in page.select("h11"):
    print(item.text)

PS регулярное выражение не вариант .find_all(string=re.compile("h")) здесь.

1 Ответ

0 голосов
/ 28 февраля 2019

Один из подходов состоит в том, чтобы просто использовать .find_all() для всех возможных h тегов:

htmlelements="""
<h1>
    <a href="https://somesite.com/">SEC fight</a>
</h1>
<h11>
    <a href="https://somesite.com/">AFC fight</a>
</h11>
<h9>
    <a href="https://somesite.com/">UTY fight</a>
</h9>
"""

from bs4 import BeautifulSoup

page = BeautifulSoup(htmlelements, "lxml")

for item in page.find_all(f"h{h}" for h in range(1, 20)):
    print(item.get_text(strip=True))

Это будет отображать:

SEC fight
AFC fight
UTY fight
...