Как в BeautifulSoup получить текст страницы в с пробелами между текстом в разных тегах
Цель: получить текст из HTML при помощи BeautifulSoup.
Текст берется из любых текстовых тегов, за исключением тегов a
.
Не нашел как можно добавить пробел если текст берется из рядом стоящих тегов. Иначе текст сливается между собой.
from bs4 import BeautifulSoup
html = """<html>
<body>
<div>
<p>Hello</p><p>World <a href='/'>Ancor World</a></p>
<p>Cat And</p><p>Dog</p>
</div>
</body>
</html>"""
soup = BeautifulSoup(html, 'html.parser')
a_tags = soup.find_all('a')
text_a = ' '.join([tag.getText() for tag in a_tags])
body = soup.find('body')
for a in body.find_all('a'):
a.replace_with(' ')
body_text = body.getText()
print(text_a)
print(body_text)
Вывод кода:
Текст ссылок:
Ancor World
- ок.
Остальной текст в body: HelloWorld Cat AndDog
Не ок, текст сливается, нужно: Hello World Cat And Dog
Работающее решение
Использовать body_text = body.get_text(separator=' ')
вместо body_text = body.getText()
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Ну так вам нужно разделить пробелами теги p
, а не теги a
. Попробуйте например заменить код:
body_text = body.getText()
На код:
body_text = ' '.join(tag.getText() for tag in body.find_all('p'))
Вывод:
Ancor World
Hello World Cat And Dog