#html #beautifulsoup
Вопрос:
У меня есть довольно длинный HTML-файл, который выглядит так:
<div><nobr>
<span>ABC</span>
<span>DEF</span>
<span>GHI</span>
</nobr></div>
<div><nobr>
<span>100</span>
</nobr></div>
<div><nobr>
<span>JKL</span>
<span>MNO</span>
<span>PQR</span>
</nobr></div>
<div><nobr>
<span>101</span>
</div></nobr>'
Это то, что я пробовал:
soup = BeautifulSoup(html_code, 'lxml')
nobr_tags = soup.select('nobr')
Как я могу получить весь текст внутри span
тегов в nobr
HTML-теге в одной строке с помощью BeautifulSoup?
Я хочу получить это:
ABCDEFGHI, 100, JKLMNOPQR, 101, ...
Но то, что я получил, было:
ABC, DEF, GHI, 100, JKL, MNO, PQR, 101, ...
Некоторые <nobr>
теги содержат 2, 3 или 4 <span>
тега внутри <nobr>
тега.
Независимо от того, сколько тегов span содержится в теге nobr, я хочу собрать весь текст внутри <nobr>
тега в одну строку.
Ответ №1:
Вы можете использовать генератор-выражение для join()
тегов с a ,
.
from bs4 import BeautifulSoup
html_doc = """
<div>
<nobr>
<span>ABC</span>
<span>DEF</span>
<span>GHI</span>
</nobr>
</div>
<div>
<nobr>
<span>100</span>
</nobr>
</div>
<div>
<nobr>
<span>JKL</span>
<span>MNO</span>
<span>PQR</span>
</nobr>
</div>
<div>
<nobr>
<span>101</span>
</div>
</nobr>
"""
soup = BeautifulSoup(html_doc, "lxml")
print(
", ".join(x.get_text(strip=True) for x in soup.select("nobr"))
)
Выход:
ABCDEFGHI, 100, JKLMNOPQR, 101
Комментарии:
1. Большое вам спасибо за вашу помощь! Это работает как по волшебству! : )