我正在尝试使用BeautifulSoup:
<h4>Hello<br /></h4>
<p><img src="http://url.goes.here" alt="hiya" class="img" />May 28, 1996</p>
对于此示例,假设我在变量<h4>
中保存了tag
标记。当我输入print tag.text
时,输出为Hello
,正如所料。
然而,当我使用print tag.nextSibling
时,输出什么都没有。当我输入print tag.nextSibling.nextSibling
时,输出为<p><img src="http://url.goes.here" alt="hiya" class="img" />May 28, 1996</p>
。到底是怎么回事?为什么我必须加倍使用.nextSibling
来获取示例中的<p>
标记?这始终是一个错误。
答案 0 :(得分:3)
显然,.nextSibling 将抓取白色文字。因此,在我正在使用的实际页面中,<h4>
和<p>
标记之间有白色文字,这就是我必须加倍的原因。
<强>证据强>
写作:
print tag.__class__
print tag.nextSibling.__class__
print tag.nextSibling.nextSibling.__class__
收率:
<class 'BeautifulSoup.Tag'>
<class 'BeautifulSoup.NavigableString'>
<class 'BeautifulSoup.Tag'>
答案 1 :(得分:2)
以下是官方文档中的内容: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#going-down
在真实文档中,标记的.next_sibling或.previous_sibling通常是包含空格的字符串。回到“三姐妹”文件:
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a>
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>
您可能认为第一个标记的.next_sibling是第二个标记。但实际上,它是一个字符串:逗号和换行符将第一个标记与第二个标记分开:
link = soup.a
link
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
link.next_sibling
# u',\n'
第二个标记实际上是逗号的.next_sibling:
link.next_sibling.next_sibling
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>