Python - Извлечь текст следующего брата - PullRequest
1 голос
/ 28 апреля 2020

У меня возникла проблема, из-за которой я не могу правильно извлечь следующий родной текст, всегда получаю None.

soup_details.find(text='COLOR').next_sibling

HTML

<div><strong>COLOR</strong></div>
<div>Electric Blue.</div>

Ожидаемый результат

Electric Blue.

Ответы [ 3 ]

1 голос
/ 28 апреля 2020

Вы также можете сделать следующее.

from bs4 import BeautifulSoup

html = '<div><strong>COLOR</strong></div>' \
       '<div>Electric Blue.</div>'

soup = BeautifulSoup(html, features="lxml")
element = soup.select('div:nth-of-type(2)')[0]
print(element.text)
1 голос
/ 28 апреля 2020

Проблема в том, что ваш элемент - это не div, а COLOR текст, который является NavigableString объектом. Вам нужно go на два узла вверх (strong и div) и найти div рядом с ним. Примерно так можно выполнить эту работу:

soup.find(text='COLOR').parent.parent.find_next('div').text  # Electric Blue.

Полный пример:

from bs4 import BeautifulSoup

html = """
<div><strong>COLOR</strong></div>
<div>Electric Blue.</div>
"""

soup = BeautifulSoup(html)
print(soup.find(text='COLOR').parent.parent.find_next('div').text)

Отпечатки:

Electric Blue.
0 голосов
/ 28 апреля 2020

Если у вас BS 4.7.1 или выше, вы можете использовать этот селектор css.

print(soup.select_one('div:contains("COLOR")').find_next('div').text)

Код :

html='''<div><strong>COLOR</strong></div>
<div>Electric Blue.</div>'''
soup=BeautifulSoup(html,'html.parser')
print(soup.select_one('div:contains("COLOR")').find_next('div').text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...