Beautifulsoup:当我尝试使用 Beautifulsoup4 访问 soup.head.next_sibling 值时获得新行

Posted

技术标签:

【中文标题】Beautifulsoup:当我尝试使用 Beautifulsoup4 访问 soup.head.next_sibling 值时获得新行【英文标题】:Beautifulsoup: Getting a new line when I tried to access the soup.head.next_sibling value with Beautifulsoup4 【发布时间】:2015-08-23 02:56:01 【问题描述】:

我正在尝试来自 BeautifulSoupDocs 的示例,发现它表现得很奇怪。当我尝试访问 next_sibling 值时,会出现 '\n' 而不是“body”。

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)
soup.head.next_sibling
u'\n'

我正在使用最新版本的 beautifulSoup4。即4.3.2。请帮帮我。 提前致谢。

【问题讨论】:

【参考方案1】:

BeautifulSoup 在 HTML 中“看到”了 3 个kinds of objects:

Tag NavigableString Comment

当您获得 .next_sibling 时,它会返回当前对象之后的下一个对象,在您的情况下,它是一个文本节点 (NavigableString)。在文档 here 中进行了解释。

如果您想在当前找到下一个Tag,请使用find_next_sibling(),或者,指定标签名称:find_next_sibling("body")

你也可以使用“下一个兄弟”CSS Selector:

soup.select("head + *")

【讨论】:

感谢 alecxe 的详细解释。【参考方案2】:

试试这个

soup.head.find_next_sibling()

soup.head.next_sibling.next_sibling

【讨论】:

以上是关于Beautifulsoup:当我尝试使用 Beautifulsoup4 访问 soup.head.next_sibling 值时获得新行的主要内容,如果未能解决你的问题,请参考以下文章

使用动态滚动解析网页的所有链接

使用 Beautifulsoup 从网站中提取数据

无法在python中导入beautifulsoup

div的BeautifulSoup子项

我正在尝试让 BeautifulSoup 打开***,但我收到了很多错误

BeautifulSoup:“响应”类型的对象没有 len()