使用find_all
,而不是findNext
:
import bs4 as bs
content = '''\
<tr>
<td id="freistoesse">Giraffe</td>
<td>14</td>
<td>7</td>
</tr>'''
soup = bs.BeautifulSoup(content)
for td in soup.find('td', text='Giraffe').parent.find_all('td'):
print(td.text)
產生
Giraffe
14
7
或者,你可以使用find_next_siblings
(又稱fetchNextSiblings
):
for td in soup.find(text='Giraffe').parent.find_next_siblings():
print(td.text)
產量
14
7
說明:
注意soup.find(text='Giraffe')
回報NavigableString。
In [30]: soup.find(text='Giraffe')
Out[30]: u'Giraffe'
要獲得相關td
標籤,使用
In [31]: soup.find('td', text='Giraffe')
Out[31]: <td id="freistoesse">Giraffe</td>
或
In [32]: soup.find(text='Giraffe').parent
Out[32]: <td id="freistoesse">Giraffe</td>
一旦你的td
標籤,你可以使用find_next_siblings
:
In [35]: soup.find(text='Giraffe').parent.find_next_siblings()
Out[35]: [<td>14</td>, <td>7</td>]
PS。 BeautifulSoup添加了使用下劃線而不是CamelCase的方法名稱。他們做同樣的事情,但符合PEP8風格指南的建議。因此,比fetchNextSiblings
更喜歡find_next_siblings
。
謝謝,不知道爲什麼#1方法引發了一個錯誤:'AttributeError:'NavigableString'對象沒有屬性'find_all''的想法? – nutship
'soup.find(text ='Giraffe')'返回一個'NavigableString'。使用'soup.find('td',text ='Giraffe')'代替'td'標籤。從那裏,調用'fetchNextSibling()'。 – unutbu
非常感謝您的幫助! – nutship