使用 BeautifulSoup 解析嵌套 div

2023-12-24

我正在尝试解析许多包含文本、表格和 html 的网页。每个页面都有不同数量的段落,但每个段落都以一个开头开头<div>, 闭幕式</div>直到最后才发生。我只是想获取内容,过滤掉某些元素并用其他元素替换它们

期望的结果:text1 <b>text2</b> (table_deleted) text3

实际结果text1\n\ntext2some text heretext 3text2some text heretext 3 (table deleted)

from bs4 import BeautifulSoup

html = """
<h1>title</h1>
<h3>extra data</h3>
<div>
    text1
    <div>
        <b>next2</b><table>some text here</table>text 3
    </div>
</div>"""

soup = BeautifulSoup(html, 'html5lib')
tags = soup.find('h3').find_all_next()
contents = ""
for tag in tags:
    if tag.name == 'table':
        contents += " (table deleted) "

    contents += tag.text.strip()

print(contents)

不要使用html5lib作为解析器而不是使用html.parser。话虽这么说,您可以使用以下命令访问紧随“h3”标签之后的“div”CSS选择器 https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectorsselect_one method.

从那里,您可以unwrap https://www.crummy.com/software/BeautifulSoup/bs4/doc/#replace-with下面的“div”标签并使用替换“table”标签replace_with https://www.crummy.com/software/BeautifulSoup/bs4/doc/#replace-with method

In [107]: from bs4 import BeautifulSoup

In [108]: html = """
     ...: <h1>title</h1>
     ...: <h3>extra data</h3>
     ...: <div>
     ...:     text1
     ...:     <div>
     ...:         <b>next2</b><table>some text here</table>text 3
     ...:     </div>
     ...: </div>"""

In [109]: soup = BeautifulSoup(html, 'html.parser')

In [110]: my_div = soup.select_one('h3 + div')

In [111]: my_div
Out[111]: 
<div>
    text1
    <div>
<b>next2</b><table>some text here</table>text 3
    </div>
</div>

In [112]: my_div.div.unwrap()
Out[112]: <div></div>

In [113]: my_div
Out[113]: 
<div>
    text1

<b>next2</b><table>some text here</table>text 3

</div>

In [114]: my_div.table.replace_with('(table deleted)')
Out[114]: <table>some text here</table>

In [115]: my_div
Out[115]: 
<div>
    text1

<b>next2</b>(table deleted)text 3

</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 BeautifulSoup 解析嵌套 div 的相关文章

随机推荐

  • 如何在 Qt 中解析 XML 字符串

    我正在开发一个应用程序 在创建 Web 服务后 我收到了来自服务器的响应 该响应位于 XML 标记中 响应 r n
  • 递归地应用复杂的泛型类型

    谢谢一个答案 https stackoverflow com questions 58409603 generate a type where each nullable value becomes optional来自 Nit 我有一个通
  • 在reactjs中将字符串作为html

    我有一个返回多行 html 的函数 如下所示 render function var badges user get achievements badges map function badge var str h3 span span h
  • 在命令窗口中禁用自动滚动

    我在 Matlab 中编写的许多代码都有非常详细的输出 当程序运行时 信息被打印到命令窗口 并且每换行一次 窗口就会自动滚动到底部 当我想更仔细地阅读一些输出或向上滚动以查看较旧的输出时 这会成为一个问题 我可以向上滚动 但只能直到打印出新
  • 在 Delphi 中通过 COM 对象使用 .Net 类有时会挂起

    我有一组用 Delphi NET NET 1 1 编写的库 我想在我的 Win32 Delphi 应用程序中使用它们 对于与性能相关的问题 我决定采用 COM 路线 有时 在重建 DLL 后 当我尝试实例化通过 COM 公开的对象时 Win
  • 如何在没有配置的情况下设置分页链接的样式 - codeigniter

    我有以下分页样式 ul class pagination li a href i class fa fa long arrow left i Previous Page a li li class active a href 1 a li
  • 我有一个程序,我想比较带来日期并带来所需的数据

    我将所有详细信息写在我有两个名为 GAZZETED DAYS 的表 其中包含列 GAZZETED DATE DESCRIPTION PAY IN OUT 包含列 EMP CODE ATT DATE 请检查我已经粘贴在 dbfiddle 中的
  • 从 Azure Blob 存储下载文件

    我有一个应用程序 允许用户上传存储在 Azure Blob 存储中的照片 用户还可以查看这些照片 要查看它们 我们希望应用程序将图像下载到默认下载位置 目前 上传工作完美 但我发现Azure API的下载功能似乎没有做任何事情 另外 我无法
  • 在显示用户数据的视图表中更改和保存 mysql 用户数据

    我有一个表 显示从 mysql 表中获取的用户数据 我希望使其可以在该表的单元格内编辑 我已经使用 php 在 文本 类型输入字段中显示数据 如代码所示 为了重新提交更改的数据 我将表行包装在表单中 但问题是表单数据没有重新提交 我想让用户
  • Fluent nHibernate 自动映射属性为 nvarchar(max)

    使用流畅的 nhibernate 和自动映射 nhibernate 创建我的数据库模式 我如何让 nhibernate 基于以下类在数据库中创建 nvarchar max 列 public class VirtualPage BaseEnt
  • C# 中的动态字符串格式化

    我创建了接受字符串的 log 方法 当我想使用它时 我会写这样的内容 Log string Format Message 0 AdditionalInfo 我应该如何实施Log方法以便能够使用字符串Format但不必在方法参数中显式编写 L
  • 404 Not Found,但 Laravel 5.4 中存在路由

    我正在使用 PhpStorm 我可以运行并打开index php 但是当我想按提交按钮 登录后 时 它显示 404 未找到 在 Windows 10 上运行的 Web 服务器 Apache 2 4 这是我的家 这是我的路线 我不完全确定为什
  • .dynamicType 已弃用。使用“类型(...)”代替

    我刚刚更新到 Xcode 8 和 iOS 10 使用旧版 Swift 语言版本 尝试再次编译我的项目一直是一种痛苦 即使仍然使用旧的 Swift 语法 这次我的函数之一使用NSBundle forClass self dynamicType
  • 如何调试从完全信任进程启动器启动的 .exe

    我在同一解决方案中构建了一个 UWP 应用程序和一个 WPF 应用程序 我正在使用 FullTrustProcessLauncher 类从 UWP 应用程序启动 WPF 应用程序 我还使用 App Service Connection 类来
  • 查找嵌套数组中符合条件的第一个元素

    我有以下文件 doc1 array field ABC enabled false field BCD enabled true field DEF enabled false field XYZ enabled true doc2 arr
  • 使用 ADO.net 和 SQL 中的特殊字符

    我想在 Winforms 中编写一个小型应用程序 我可以在其中编写一些单词并使用 ADO net 将它们写入 SQL 数据库 当我想编写带有占位符的字符串时遇到麻烦 例如 Give me your s right now 我的数据库中记录的
  • AlertDialog 与 EditText,自动打开软键盘并聚焦于 EditText 不起作用

    我正在尝试编写一段代码 该代码应在 AlertDialog 中显示 EditText 后立即将其聚焦 然后自动打开软键盘 相反 它只会使屏幕变暗 Builder builder new Builder this final EditText
  • 防止快速点击视图

    我正在 Xcode 和 swift 中工作 我创建了一个视图 充当点击时切换的菜单 当菜单出现时 我仍然可以单击其下方的测试按钮 我不希望这种事发生 我希望禁用视图后面的所有内容 优先考虑菜单视图 查看下图 示例应用程序的屏幕截图 http
  • Azure Service Fabric 中的可靠 blob 状态?

    是否有推荐的方法将 blob 用作 Azure Service Fabric 中的可靠状态 我看到两个选择 实现分块机制并将块存储在可靠的集合中 不过 这个选项的开发 维护负担相当重 外部存储 Blob Azure Blob 存储 不过 此
  • 使用 BeautifulSoup 解析嵌套 div

    我正在尝试解析许多包含文本 表格和 html 的网页 每个页面都有不同数量的段落 但每个段落都以一个开头开头 div 闭幕式 div 直到最后才发生 我只是想获取内容 过滤掉某些元素并用其他元素替换它们 期望的结果 text1 b text