Подтвердить что ты не робот

Beautifulsoup - nextSibling

Я пытаюсь получить контент "Мой домашний адрес", используя следующее, но получил AttributeError:

address = soup.find(text="Address:")
print address.nextSibling

Это мой HTML:

<td><b>Address:</b></td>
<td>My home address</td>

Что такое хороший способ перемещаться вниз по тегу td и извлекать содержимое?

4b9b3361

Ответ 1

Проблема заключается в том, что вы нашли NavigableString, а не <td>. Кроме того, nextSibling найдет следующий NavigableString или Tag, поэтому даже если у вас есть <td>, он не будет работать так, как вы ожидаете.

Это то, что вы хотите:

address = soup.find(text="Address:")
b_tag = address.parent
td_tag = b_tag.parent
next_td_tag = td_tag.findNext('td')
print next_td_tag.contents[0]

Или более кратким:

print soup.find(text="Address:").parent.parent.findNext('td').contents[0]

На самом деле вы могли бы просто сделать

print soup.find(text="Address:").findNext('td').contents[0]

Так как findNext снова и снова вызывает next, а next находит следующий элемент повторно разобранным до тех пор, пока он не будет соответствовать.

Ответ 2

Попробуйте это, если вы используете bs4:

print soup.find(string="Address:").find_next('td').contents[0]

Ответ 3

Вы можете легко использовать findChildren, чтобы перебирать td в таблице, предполагая это в таблице. Сначала вы можете найти таблицу, в идеале:

table = soup.find('table')
>>> for td in table.findChildren('td'):
...:     print td.text
...:     
...:     
Address:
My home address

Или вы можете искать адрес и получить контейнер таблицы:

>>> import re
>>> search = re.compile('Address')
>>> table = soup.find(text=search).parent.parent.parent