#python #beautifulsoup
Вопрос:
У меня есть html-файл с именем file.html
, я получаю из него данные с помощью этого кода:
f = open(file,encoding="utf8")
document = BeautifulSoup(f.read()).get_text()
этот код возвращает весь текст в html-файле, но мне нужен код, который может удалять заголовки, находящиеся внутри тегов h3, и получать оставшийся текст.
Комментарии:
1.
BeautifulSoup
должна быть функция удаления некоторых элементов из HTML, и вы могли бы использовать ее перед получением текста.
Ответ №1:
Вы можете использовать item.extract()
или item.decompose()
удалить элемент из soup
.
В конечном итоге вы можете использовать item.clear()
для удаления содержимого из элемента, и позже HTML будет содержать элемент, но без текста.
for h3 in soup.find_all('h3'):
h3.extract()
#h3.decompose()
#h3.clear()
Минимальный рабочий пример:
from bs4 import BeautifulSoup
html = '''<div>Hello <h3>other</h3> World <h3>:)</h3><div>'''
soup = BeautifulSoup(html, 'html.parser')
print('--- before ---')
print(soup.get_text())
for h3 in soup.find_all('h3'):
h3.extract()
#h3.decompose()
#h3.clear()
print('--- after ---')
print(soup.get_text())
Результат:
--- before ---
Hello other World :)
--- after ---
Hello World
Документация: извлечение(), разложение(), очистка()
Ответ №2:
попробуйте этот код, он должен игнорировать все теги h3 в вашем файле и обработать его позже:
soup = BeautifulSoup(open("file.html", encoding="utf8"),"html.parser")
clean = []
for tag in soup.find_all('h3'):
clean.append(tag.text)
f = open("file.html", encoding="utf8")
document = BeautifulSoup(f.read()).get_text()
for item in clean:
document = document.replace(item,' ')
print(document)