Игнорировать теги h3 в html-файле

#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)