python - 使用 beautifulsoup 提取 <br> 之间的文本,但没有下一个标签

标签 python html web-scraping beautifulsoup html-parsing

我正在使用 python + beautifulsoup 来尝试获取 br 之间的文本。我最接近的方法是按以下方式使用 next_sibling:

<html>
<body>
</a><span class="strong">Title1</span>
<p>Text1</p>
<br>The Text I want to get<br>
<p>Text I dont want</p>
</body>
</html>

for span in soup.findAll("span", {"class" : "strong"}):
    print(span.next_sibling.next_sibling.text)

但是这会打印:

The Text I want to getText I dont want

所以我想要的是在第一个 p 之后,但在第二个 p 之前,但我不知道如何在没有真正标签的情况下提取,而只有 br 作为引用。

我需要它来打印:

The Text I want to get

最佳答案

由于您提供的 HTML 已损坏,因此行为将不同于 parser to parser BeautifulSoup 使用的。

如果是lxml parserBeautifulSoup 会将 br 标签转换为自闭合标签:

>>> soup = BeautifulSoup(data, 'lxml')
>>> print soup
<html>
<body>
<span class="strong">Title1</span>
<p>Text1</p>
<br/>The Text I want to get<br/>
<p>Text I dont want</p>
</body>
</html>

请注意,您需要 lxml待安装。如果您可以的话 - 找到 br 并获取下一个同级:

from bs4 import BeautifulSoup

data = """your HTML"""
soup = BeautifulSoup(data, 'lxml')

print(soup.br.next_sibling)  # prints "The Text I want to get"

另请参阅:

关于python - 使用 beautifulsoup 提取 <br> 之间的文本,但没有下一个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27814602/

相关文章:

python - 自动执行重复的键盘操作

python - 允许关闭数据库时关闭 cx_Oracle 连接

python - 如何向按钮添加 Shift-Click 选项

html - Windows 中 Safari 上的媒体查询不起作用

javascript - 使用 onclick 功能按钮更改选择选项下拉列表

python - 从需要登录的页面中抓取数据

python - 使用 python 日志记录模块时,如何记录脚本启动时花费的时间而不是实际时间?

javascript - TamperMonkey:在没有 ID 的 <td> 中的内容后添加元素

尝试启动 firefox 时出现 Python selenium 错误

html - 在python中获取特定的span标签文本(BeautifulSoup)