#python #beautifulsoup #nlp
#python #beautifulsoup #nlp
Вопрос:
Я хотел бы проанализировать HTML-документ и игнорировать элементы span (но сохранить их содержимое), чтобы я мог повторять строки в документе так, как их видит пользователь, в отличие от того, как их видит анализатор HTML. Я пробовал разворачивать и не получил ожидаемого результата — вот пример того, что я пытаюсь сделать:
html = "<p>text <span>more text</span> additional text</p>"
soup = BeautifulSoup(html,'html.parser')
for match in soup.findAll('span'):
match.unwrap()
for string in soup.strings:
print(string)
Предполагаемый результат:
text more text additional text
Результат, который я получаю:
text
more text
additional text
Как я могу игнорировать теги span, чтобы при выполнении итерации с использованием html.strings итератор вел себя так, как будто никогда не было промежутков?
Ответ №1:
Вы можете использовать разные подходы:
A: соедините ваши span
тексты в строку:
''.join([string for string in soup.strings])
B: просто используйте .text
в p
теге:
for match in soup.find_all('p'):
print(match.text)
Примеры:
from bs4 import BeautifulSoup
html = "<p>text <span>more text</span> additional text</p>"
soup = BeautifulSoup(html,'html.parser')
for match in soup.findAll('span'):
match.unwrap()
print(''.join([string for string in soup.strings]))
for match in soup.find_all('p'):
print(match.text)
Выводит
text more text additional text
text more text additional text