Python + BeautifulSoup:如何从基于文本的 HTML 中获取包装器?

2023-12-29

想要获得关键文本的包装。例如,在 HTML 中:

…
<div class=“target”>chicken</div>
<div class=“not-target”>apple</div>
…

并根据文本“鸡”,想要返回<div class=“target”>chicken</div>.

目前,有以下方法来获取 HTML:

import requests
from bs4 import BeautifulSoup

req = requests.get(url).txt
soup = BeautifulSoup(r, ‘html.parser’)

并且必须要做soup.find_all(‘div’,…)并循环遍历所有可用的div找到我正在寻找的包装纸。

但不必遍历每个div, 根据定义的文本获取 HTML 中的包装器的正确且最佳的方法是什么?

预先感谢您,一定会接受/赞成答案!


# coding: utf-8

html_doc = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title> Last chicken leg on stock! Only 500$ !!! </title>
  </head>
  </body>
    <div id="layer1" class="class1">
        <div id="layer2" class="class2">
            <div id="layer3" class="class3">
                <div id="layer4" class="class4">
                    <div id="layer5" class="class5">
                      <p>My chicken has <span style="color:blue">ONE</span> leg :P</p>
                        <div id="layer6" class="class6">
                            <div id="layer7" class="class7">
                              <div id="chicken_surname" class="chicken">eat me</div>
                                <div id="layer8" class="class8">
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
  </body>
</html>"""

from bs4 import BeautifulSoup as BS
import re
soup = BS(html_doc, "lxml")


# (tag -> text) direction is pretty obvious that way
tag = soup.find('div', class_="chicken")
tag2 = soup.find('div', {'id':"chicken_surname"})
print('\n###### by_cls:')
print(tag)
print('\n###### by_id:')
print(tag2)

# but can be tricky when need to find tag by substring
tag_by_str = soup.find(string="eat me")
tag_by_sub = soup.find(string="eat")
tag_by_resub = soup.find(string=re.compile("eat"))
print('\n###### tag_by_str:')
print(tag_by_str)
print('\n###### tag_by_sub:')
print(tag_by_sub)
print('\n###### tag_by_resub:')
print(tag_by_resub)

# there are more than one way to access underlying strings
# both are different - see results
tag = soup.find('p')

print('\n###### .text attr:')
print( tag.text, type(tag.text) )

print('\n###### .strings generator:')
for s in tag.strings:   # strings is an generator object
    print s, type(s)

# note that .strings generator returns list of bs4.element.NavigableString elements
# so we can use them to navigate, for example accessing their parents:
print('\n###### NavigableString parents:')
for s in tag.strings:  
    print s.parent

# or even grandparents :)
print('\n###### grandparents:')
for s in tag.strings:  
    print s.parent.parent
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python + BeautifulSoup:如何从基于文本的 HTML 中获取包装器? 的相关文章

  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • 使用 float:left 与 display:inline-block 的 jQuery UI 拖放排序比较

    我这里有两个例子 这两个例子之间的唯一区别是 一种使用display inline block 另一种使用float left li doc item 显示 内联块 与 li doc item float left 我的问题是 displa
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • 如何使用 paramiko 查看(日志)文件传输进度?

    我正在使用 Paramiko 的 SFTPClient 在主机之间传输文件 我希望我的脚本打印文件传输进度 类似于使用 scp 看到的输出 scp my file user host user host password my file 1
  • 从链接打开本地文件夹

    如何通过单击任何链接打开本地文件夹视图 我尝试了很多选择 例如 a href Open folder a or a Open folder a or a Open folder a 解决方案 启动可下载链接 以下内容适用于所有浏览器 但一如
  • 将文本注释到轴并对齐为圆

    我正在尝试在轴上绘制文本并将该文本与圆对齐 更准确地说 有一些具有不同坐标 x y 的点位于该圆内 并使用以下命令创建 ax scatter x y s 100 我想用圆圈连接并标记每个点 Cnameb 文本的坐标由 xp yp 定义 因此
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • Svelte 条件元素类报告为语法错误

    我正在做一个if块每if 块的精简指南 https svelte technology guide if blocks 这看起来很简单 但 Svelte 认为这是一个语法错误 svelte plugin ParseError Unexpec
  • 禁用复选框上的输入

    需要在取消选中该复选框时禁用输入 并在选中该复选框时启用它 我的代码是这样的 div class y div
  • 无法在 python 3.8 上将带有 webapp 的 python 部署到 azure

    我正在尝试使用部署一个测试项目Flask使用以下方法将框架迁移到 Azure 云中Azure CLI https learn microsoft com en us azure app service containers quicksta
  • 是否可以将 pd.Series 分配给无序 pd.DataFrame 中的列而不映射到索引(即不重新排序值)?

    在 Pandas 中创建或分配新列时 我发现了一些意外的行为 当我对 pd DataFrame 进行过滤或排序 从而混合索引 然后从 pd Series 创建新列时 Pandas 会重新排序该系列以映射到 DataFrame 索引 例如 d
  • 为什么我的 Web 组件 CSS 不显示?我没有使用shadowDOM

    我有一个没有使用 ShadowDOM 的 Native V1 组件 所以我将 CSS 放在 但是当其他人使用我的组件时 我的 CSS 就不再起作用了 仅当其组件确实使用 ShadowDOM 时才会发生这种情况 我的组件的示例代码 class
  • 对数据帧的每 2 小时数据进行 Groupby

    我有一个数据框 Time T201FN1ST2010 T201FN1VT2010 1791 2017 12 26 00 00 00 854 69 0 87 1792 2017 12 26 00 20 00 855 76 0 87 1793
  • 选择子元素但不选择孙元素

    我有以下简化的代码 div p text p div div p text p div div p text p div div p text p div 每当我设置一些值时 content pCSS 文件中的元素 更改也适用于 col1
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • 在 virtualenvwrapper 中激活环境

    我安装了virtualenv and virtualenvwrapper用这个命令我创建了一个环境 mkvirtualenv cv 它有效 创建后我就处于新环境中 现在我重新启动了我的电脑 我想activate又是那个环境 但是怎么样 我使
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro

随机推荐

  • 为什么赋值的值总是参数的值? [复制]

    这个问题在这里已经有答案了 有人愿意解释一下为什么在旧版本的Ruby中 赋值的结果是属性设置方法返回的值 但是在Ruby 1 8之后 赋值的值总是参数的值 该方法的返回值被丢弃 在下面的代码中 旧版本的 Ruby 会将结果设置为 99 现在
  • 在进行另一次检查之前如何检查变量不为空?

    我有这个代码 if App selectedPhrases null App selectedPhrases Count 0 有没有办法可以使用 来简化它 运算符检查 null 而不是使用 连接进行两个不同的检查 您可以使用 null 条件
  • 使用 Hibernate 将两个或多个应用程序连接到同一个数据库

    我计划构建一个桌面应用程序 它将使用 Hibernate 和 MySQL 作为其数据源 我想在多台机器上执行桌面应用程序 但我希望它们都读 写同一个 MySQL 数据库 这可能吗 我担心的是当两个应用程序尝试访问 修改相同信息时的并发问题
  • 如果我没有足够的内存,spark 会做什么?

    我是 Spark 新手 我发现文档说 Spark 会将数据加载到内存中以使迭代算法更快 但是如果我有 10GB 的日志文件而只有 2GB 内存怎么办 Spark 会像往常一样将日志文件加载到内存中吗 我认为这个问题在 Spark 网站的 F
  • 使用 Graphql 时填充猫鼬模式中的“Ref”

    我正在使用 Graphql 然后遇到需要填充的情况 但我不知道如何执行它 这是我的预订架构 const mongoose require mongoose const Schema mongoose Schema const booking
  • 如何从 github 安装一个 fork 作为依赖项?

    我已经创建了某个存储库的分支 我需要使用该分支作为我的项目的依赖项 现在我这样做 npm install angular save 如何更改此设置以安装分叉 来自安装命令的 NPM 文档 https docs npmjs com cli i
  • PHP + Javascript - 读/写 Cookie

    是否可以使用 javascript 创建 cookie 然后使用 PHP 读取它 那么反过来呢 是的 您可以在任何一方设置和读取 cookie 在 javascript 方面 您需要解析document cookie变量 但是有很多库可以做
  • 使用 jquery 更改链接中的 html 文本

    这里有一个简单的问题 有没有办法更改文本 单击此处 a href nothing click here a 在这个链接中 Richard 你必须使用jquery的text 函数 https api jquery com text text
  • 应为使用 GetDIBits 函数从 HBITMAP 接收的 DIB 数据分配多少内存?

    应为使用 GetDIBits 函数从 HBITMAP 接收的 DIB 数据分配多少内存 MSDN中对GetDIBits函数的描述如下 int GetDIBits in HDC hdc in HBITMAP hbmp in UINT uSta
  • 如何使用 jQuery 选择文本节点?

    我想获取一个元素的所有后代文本节点 作为 jQuery 集合 最好的方法是什么 jQuery 没有为此提供方便的函数 你需要结合contents 它将只给出子节点 但包括文本节点 其中find 它给出所有后代元素 但不给出文本节点 这是我想
  • $(document).keydown 不起作用

    Edit 感谢大家的帮助 但我将我的问题跟踪为代替 请投票关闭 知道为什么吗 function document keydown function evt alert Hello 不管用 我在用Firefox 3 6 13在 Ubuntu
  • 什么时候需要 pygame.init() ?

    我正在学习 pygame 在绝大多数教程中据说应该运行pygame init 在做任何事情之前 我正在做一个特定的教程并像一个人那样输入代码 并注意到在一个又一个的示例中没有pygame init 并且没有任何模块的其他显式初始化 例如 以
  • 使用角度过滤来过滤角度材料表中的特定列?

    我在用垫子表 https run stackblitz com api angular v1 file app 2Ftable filtering example ts 它有一个过滤器 工作正常 针对以下数据进行过滤 所有列 const E
  • 每个用户表都应该有聚集索引吗?

    最近 我在数据库中发现了几个没有定义聚集索引的表 但定义了非聚集索引 因此它们位于 HEAP 上 经过分析 我发现 select 语句对非聚集索引中定义的列使用过滤器 这些表上没有聚集索引会影响性能吗 很难比 SQL Server MVP
  • Matplotlib event_handling 线选择器

    This example http matplotlib org examples event handling legend picking html可以单击图例从而更改绘图 我想做类似的事情 但不是通过单击图例 而是通过单击图中的线 我
  • Android 检查 SharedPreferences 的值类型

    我有一些键值对SharedPreferences 有整数 浮点数 字符串等 有没有办法检查给定的键是否属于特定类型 EDIT 我研究了文档和可用的方法 可悲的是 在我看来 我需要使其成为一种 肮脏 的方式 只需尝试每个 get 方法 直到我
  • Autofac 无法解析模块中的依赖关系

    我是 AutoFac 的新手 我认为应该是一个简单的场景 var builder new ContainerBuilder builder Register c gt new EventLogLogger As
  • Selenium WebDriver JS - 显式等待

    我正在使用 selenium webdriverjs 我想等待显示某个元素 我已为其创建了显式等待 如下所示 它工作得很好 var displayed false driver wait function driver findElemen
  • 圆形 LinearGradient 上的 ContextMenu 在 SwiftUI 中产生锐边

    我有以下观点 struct ContentView View var body some View LinearGradient gradient Gradient colors blue red startPoint topTrailin
  • Python + BeautifulSoup:如何从基于文本的 HTML 中获取包装器?

    想要获得关键文本的包装 例如 在 HTML 中 div class target chicken div div class not target apple div 并根据文本 鸡 想要返回 div class target chicke