Beautiful Soup | next_sibling property
Start your free 7-days trial now!
In Beautiful Soup, the next_sibling
property of a tag or a string returns the next tag or string under the same parent.
Examples
Basic usage
Consider the following HTML document:
my_html = "<p><b>Alex</b><i>is great</i></p>"soup = BeautifulSoup(my_html)
Let's get the next_sibling
of <b>Alex</b>
:
b_alex.next_sibling
<i>is great</i>
This tell us that the next node of <b>Alex</b>
is <i>is great</i>
, which we know is true since <i>is great</i>
is the next element under the same p
tag.
If the next node does not exist, then a None
is returned:
b_alex.next_sibling.next_sibling
None
Unexpected behaviour
Consider the following HTML document:
my_html = """ <div> <p>Alex</p> <p>Bob</p> </div>"""soup = BeautifulSoup(my_html)
Let's get the next_sibling
of <p>Alex</p>
:
p_alex = soup.find("p")p_alex.next_sibling
'\n'
The result may be surprising for those who expected to see <p>Bob</p>
. Such a result arises because there is a new line character \n
between <p>Alex</p>
and <p>Bob</p>
. To get to Bob, then, you would need to call the next_sibling
twice:
p_alex = soup.find("p")p_alex.next_sibling.next_sibling
<p>Bob</p>
If you just wanted to access the next sibling element, then the better alternative would be to call the find_next_sibling()
method:
p_alex = soup.find("p")p_alex.find_next_sibling()
<p>Bob</p>