Beautifulsoup - получить текст не между определенными тегами (после </span>, но до <br>)? - PullRequest
0 голосов
/ 18 декабря 2018

Я осмотрелся и нашел решения, которые сработали или предполагают, что сработают для этого точного вопроса, но в этой ситуации это не сработает.У кого-нибудь есть причина, почему это будет работать здесь , а не здесь?Или просто покажи, что я делаю не так, и я смогу понять разницу.

Имейте в виду, я просто даю фрагмент HTML, он содержит гораздо больше с теми же span и class='boldText'.Я специально хочу тег с Status: в качестве его текста, затем следующий текст / содержание после этого.

import bs4 

html1 = '''<span class="boldText"><b>Date:</b>  </span>12/04/2018<br/>
<span class="boldText"><b>Name:</b>  </span>Aaron Rodgers<br/>
<span class="boldText"><b>Status:</b>  </span>Questionable<br/><br/>
<br/>
<br/><br/><br/>'''

soup = bs4.BeautifulSoup(html1,'html.parser') 
status = soup.find(text='Status:').next_sibling

Я просто пытаюсь получить текст: 'Questionable'

так ищем вывод:

>>> print (status)
>>> Questionable

1 Ответ

0 голосов
/ 18 декабря 2018

Проблема в том, что у тега b нет родных элементов.Проще увидеть, когда отформатирован так:

<span class="boldText">
    <b>Status:</b>
</span>
Questionable
<br/>

Посмотрите, как b является единственным потомком span?Строка «Сомнительный» на самом деле является родственным братом span, поэтому вам нужно перейти к нему следующим образом:

print(soup.find('b', string='Status:').parent.next_sibling)
# => 'Questionable'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...