BS4 Получить текст из всех тегов DIV, но не детей - PullRequest
2 голосов
/ 16 апреля 2020

Я сканирую несколько веб-страниц, но у меня проблема с некоторыми веб-сайтами, которые имеют контент / текст с тегами div, а не p или span. Ранее скрипт работал нормально, получая текст из тегов p и span, однако, если фрагмент кода подобен приведенному ниже:

<div>Hello<p>this is a test</p></div>

Использование find_all ('div') и .getText () обеспечивает следующий вывод:

Hello this is a test

Я хочу получить результат просто Hello. Это позволит мне определить, какой контент в каких тегах. Я попытался использовать recursive = False, однако, похоже, что он не работает на целой веб-странице с несколькими тегами div, в которых есть содержимое.

ДОБАВЛЕННЫЙ КОД КОДА

req = urllib.request.Request("https://www.healthline.com/health/fitness-exercise/pushups-everyday", headers={'User-Agent': 'Mozilla/5.0'})
html = urllib.request.urlopen(req).read().decode("utf-8").lower()
soup = BeautifulSoup(html, 'html.parser')
divTag = soup.find_all('div')
text = []
for div in divTag:
    i = div.getText()
    text.append(i)
print(text)

Заранее спасибо .

Ответы [ 2 ]

3 голосов
/ 16 апреля 2020

На основании вашей информации ответ здесь: как получить текст из тега, но игнорировать другие дочерние теги

это приведет к чему-то вроде этого:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
for div in soup.find_all('div'):
    print(div.find(text=True, recursive=False))

РЕДАКТИРОВАТЬ: вам просто нужно изменить

i = div.getText()

на

i = div.find(text=True, recursive=False)
2 голосов
/ 16 апреля 2020

Вот возможное решение, мы извлекаем все p из супа.

from bs4 import BeautifulSoup
html = "<div>Hello<p>this is a test</p></div>"
soup = BeautifulSoup(html, 'html.parser')
for p in soup.find('p'):
    p.extract()
print(soup.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...