.next_sibling 和 .previous_sibling

在文档树中,使用.next_sibling.previous_sibling属性来查询兄弟节点:

sibling_soup.b.next_sibling
# <c>text2</c>

sibling_soup.c.previous_sibling
# <b>text1</b>

<b>标签有.next_sibling属性,但是没有.previous_sibling属性,因为<b>标签在同级节点中是第一个.同理,<c>标签有.previous_sibling属性,却没有.next_sibling属性:

print(sibling_soup.b.previous_sibling)
# None
print(sibling_soup.c.next_sibling)
# None

例子中的字符串“text1”和“text2”不是兄弟节点,因为它们的父节点不同:

sibling_soup.b.string
# u'text1'

print(sibling_soup.b.string.next_sibling)
# None
# None

实际文档中的tag的.next_sibling.previous_sibling属性通常是字符串或空白. 看看“爱丽丝”文档:

sibling_soup.b.string
# u'text1'

print(sibling_soup.b.string.next_sibling)
# None

如果以为第一个<a>标签的.next_sibling结果是第二个<a>标签,那就错了,真实结果是第一个<a>标签和第二个<a>标签之间的顿号和换行符:

link = soup.a
link
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>

link.next_sibling
# u',\n'

第二个<a>标签是顿号的.next_sibling属性:

link.next_sibling.next_sibling
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>

results matching ""

    No results matching ""