关于python:Beautifulsoup-nextSibling

Beautifulsoup - nextSibling

我正在尝试使用以下方法获取内容"我的家庭住所",但得到了AttributeError:

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

这是我的HTML:

1
2
<td>Address:</td>
<td>My home address</td>

导航td标记并提取内容的好方法是什么?


问题是您找到了NavigableString,而不是

。 此外,nextSibling会找到下一个NavigableStringTag,因此即使您拥有

,它也无法按您期望的方式工作。

这就是你想要的:

1
2
3
4
5
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]

或更简洁:

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

其实你可以做

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

由于findNext只会一遍又一遍地调用next,并且next会重复查找下一个元素,直到其匹配为止。


如果使用bs4,请尝试以下操作:

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


您可以很容易地使用findChildren遍历表中的td(假设它在表中)。 您可以首先找到该表,理想情况下:

1
2
3
4
5
6
7
table = soup.find('table')
>>> for td in table.findChildren('td'):
...:     print td.text
...:    
...:    
Address:
My home address

或者,您可以搜索地址并获取表容器:

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