Beautifulsoup = извлекать содержимое в теге
Я хотел бы извлечь содержимое "Hello world". Обратите внимание, что на странице есть кратные <table>
и аналогичные <td colspan="2">
.
Я попробовал следующее:
hello = soup.find(text='Name: ')
hello.findPreviousSiblings
Но он ничего не ответил.
Здесь фрагмент кода:
<table border="0" cellspacing="2" width="800">
<tr>
<td colspan="2"><b>Name: </b>Hello world</td>
</tr>
<tr>
Кроме того, у меня также возникла проблема со следующим извлечением "Домашнего адреса":
<td><b>Address:</b></td>
<td>My home address</td>
Я также использую тот же метод для поиска текста = "Адрес:", но как перейти к следующей строке и извлечь содержимое <td>
?
Ответы
Ответ 1
используйте вместо этого
>>> s = '<table border="0" cellspacing="2" width="800"><tr><td colspan="2"><b>Name: </b>Hello world</td></tr><tr>'
>>> soup = BeautifulSoup(s)
>>> hello = soup.find(text='Name: ')
>>> hello.next
u'Hello world'
next и previous позволяют перемещаться по элементам документа в том порядке, в котором они обрабатывались парсером, в то время как методы сиблинга работают с деревом синтаксического анализа
Ответ 2
Оператор contents
хорошо работает для извлечения text
из <tag>text</tag>
.
<td>My home address</td>
пример:
s = '<td>My home address</td>'
soup = BeautifulSoup(s)
td = soup.find('td') #<td>My home address</td>
td.contents #My home address
<td><b>Address:</b></td>
пример:
s = '<td><b>Address:</b></td>'
soup = BeautifulSoup(s)
td = soup.find('td').find('b') #<b>Address:</b>
td.contents #Address: