Получить текстовое содержимое html-тегов, таких как свойство js textcontent для python

#python #python-3.x #web-scraping #beautifulsoup #web-crawler

#python #python-3.x #очистка веб-страниц #beautifulsoup #веб-сканер

Вопрос:

Я хочу получить полное текстовое содержимое каждого тега. Например, если у нас есть что-то вроде этого:

 html_code = """
<body>
    <h1>hello<b>there</b>how are you?</h1>
</body>"""
  

Я хочу получить этот результат:

  • Для body тега: '' (ничего — без каких-либо дочерних элементов)

  • Для h1 тега: 'hello there how are you?' (со всеми дочерними элементами)

  • Для b тега: 'there' (со всеми дочерними элементами)

Я пробовал много вещей, но ни одна из них не дает мне такого результата. Есть предложения?

Комментарии:

1. Этот вопрос уже задавался сегодня, а также задавался много раз раньше. Вы пробовали искать существующие ответы?

2. чувак, ты можешь дать мне ссылку? я думаю, что ни один из них не возвращает результат, подобный этому

3. @behzadmehrabi чувак, QHarr прав. В SO есть МНОЖЕСТВО примеров для этого, а также простой поиск в Google. Что вы пробовали?

4. @chitown88 можешь дать ссылку, чувак?

5. Прохладный. Что именно вы пробовали с beautifulsoup? Укажите это в своем вопросе. Покажите, какой вывод или ошибку это дало вам. И то, что вы ожидаете (которое вы включили). Это дает пользователям возможность поработать над чем-то и показывает, что вы сначала попробовали это самостоятельно.

Ответ №1:

Вам придется работать с .find() или .find_all() затем, хотите ли вы включить дочерние теги или нет, используйте recursive параметр:

 html_code = """
<body>
    <h1>hello<b>there</b>how are you?</h1>
</body>"""

import bs4

soup = bs4.BeautifulSoup(html_code, 'html.parser')


body_text = soup.body.find_all(text=True, recursive=False) 
h1_text = soup.h1.find_all(text=True, recursive=True) 
b_text = soup.b.find_all(text=True, recursive=False) 

body_text = ' '.join(body_text).strip()
h1_text = ' '.join(h1_text).strip()
b_text = ' '.join(b_text).strip()


print ('body: %snh1: %snb: %s' %(body_text, h1_text, b_text))
  

Вывод:

 body: 
h1: hello there how are you?
b: there