解析lxml中的html正文片段

2023-11-29

我正在尝试解析 html 片段:

<body><h1>title</h1><img src=""></body>

I use lxml.html.fromstring。这让我发疯,因为它不断剥夺<body>我的片段的标签:

 > lxml.html.fromstring('<html><h1>a</h1></html>').tag
 'html'
 > lxml.html.fromstring('<div><h1>a</h1></div>').tag
 'div'
 > lxml.html.fromstring('<body><h1>a</h1></body>').tag
 'h1'

我也尝试过document_fromstring, fragment_fromstring, clean_html with page_structure=False等等...没有任何作用。

我需要使用 lxml,因为我将 html 片段传递给 PyQuery。

我只是希望 lxml 不要弄乱我的 html 片段。可以这样做吗?


.fragment_fromstring()删除<html>也有标签;基本上,每当你这样做时not有一个 HTML 文档(带有<html>顶级元素和/或文档类型),.fromstring()回落至.fragment_fromstring()该方法删除了<html><body>标签,总是。

解决方法是告诉.fragment_fromstring()给你一个<body> parent tag:

>>> lxml.html.fragment_fromstring('<body><h1>a</h1></body>', create_parent='body')
<Element body at 0x10d06fbf0>

这不会保留原始的任何属性<body> tag.

另一种解决方法是使用.document_fromstring()方法,它将把你的文档包装在一个<html>标签,然后您可以再次删除该标签:

>>> lxml.html.document_fromstring('<body><h1>a</h1></body>')[0]
<Element body at 0x10d06fcb0>

This does保留属性<body>:

>>> lxml.html.document_fromstring('<body class="foo"><h1>a</h1></body>')[0].attrib
{'class': 'foo'}

使用.document_fromstring()第一个示例的函数给出:

>>> body = lxml.html.document_fromstring('<body><h1>title</h1><img src=""></body>')[0]
>>> lxml.html.tostring(body)
'<body><h1>title</h1><img src=""></body>'

如果您只想在存在的情况下执行此操作noHTML 标签,做什么lxml.html.fromstring()执行并测试完整文档:

htmltest = lxml.html._looks_like_full_html_bytes if isinstance(inputtext, str) else lxml.html._looks_like_full_html_unicode
if htmltest(inputtext):
    tree = lxml.html.fromstring(inputtext)
else:
    tree = lxml.html.document_fromstring(inputtext)[0]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析lxml中的html正文片段 的相关文章

随机推荐

  • 系统找不到启动 Ruby 和 Rails 命令提示符时指定的路径

    我一周前刚开始学习 Rails 直到今天一切正常 现在 当我启动 Ruby 命令提示符时 它会显示 The system cannot find the path specified Under Rails Environment Conf
  • 适用于所有浏览器的弹出框

    我目前正在使用 window open url blur window focus 但这只能在 Chrome 中正常工作 在 IE 中 窗口在加载完成后会重新出现 在 Firefox 中 窗口根本不会下降 别担心 这个弹出窗口不会令人厌烦
  • 来自非托管代码的 System.AccessViolationException?

    我正在编写这个库 它通过将由托管代码使用的媒体基础框架在 C CLI 中实现一些基本的音频播放器功能 我可以很好地播放音频 停止 暂停等 对于任何不熟悉 Media Foundation 的人 媒体会话都会发布您可以处理通知的事件 这是通过
  • 9 补丁可绘制行为糟糕,奇怪的人工制品 - 这里出了什么问题?

    所以我正在尝试 9 补丁图像 我从一个 PNG 文件开始 其中有一个带圆角的半透明正方形 然后 我创建了 9 patch 如下所示 注意顶部和左侧的小点 我认为这足以处理这个问题 但是当将这个 9 补丁添加到 Eclipse 时 我得到了奇
  • Objective C - 分配、复制、保留

    我是 Objective C 的新手 我有 C 的基础知识 包括指针的概念 我有两个基本问题 有人可以用一些类比来解释分配 复制和保留之间的区别吗 如何处理返回指针变量的函数 以及如何通过返回指针执行消息传递 更改文档的更新答案 这些信息现
  • windows下如何获取cpu的实际核心数? [复制]

    这个问题在这里已经有答案了 我知道 std thread hardware concurrency 的存在 但它返回虚拟核心的数量 当其针对物理核心数量时 该算法的工作效果最佳 提高 5 10 我怎样才能在 Windows 上用 C 获得这
  • Out-Host 是否正在缓冲?

    我有一个函数 我在其中调用一个应用程序 操作员 该应用程序生成几行命令行输出 下载一些文件 并返回一个字符串 app exe Out Host var return var 看来 控制台上出现了由app exe仅在那之后app exe终止
  • 如何快速检查字符串中是否有正确的英文单词? - Python

    我在 pandas 数据框中有一列 其中每个单元格都包含一串相当长的单词 这些字符串来自 SQL 数据库 包含非英语的单词和字母数字 ID 短语的混合 并以空格分隔 这些字符串最多可达 SQL 的最大字符数 这也不是一个小数据框 我有几百万
  • 从 firebase 中删除项目而不会使应用程序崩溃

    我是 android 新手 我一直在玩this来自 firebase 的示例应用程序 我想添加一个删除按钮发布详细活动它通过将 DatabaseReference mPostReference 设置为 null 来从数据库中删除当前正在查看
  • 无法使用 cordova-plugin-statusbar 设置状态栏的颜色

    我正在尝试更改离子应用程序中本机状态栏的颜色 但无法使其工作 我已经安装了 cordova plugin statusbar 并且安装得很好 下面的代码可以完美运行 if StatusBar StatusBar hide 但尝试使用任何其他
  • IE8后退按钮和动态内容

    我有一个页面 它提取外部 JavaScript 文件 然后该文件动态生成一些内容到该页面中 基本上插入一些 DIV 和 Flash 对象 当用户离开此页面然后按 后退 按钮时 Safari 和 Firefox 会显示生成的内容 但 IE 8
  • javaFX Tableview 数据不可见

    我尝试了所有方法来用数据填充 TableView 下一个代码在表中插入新行 但数据未出现在表中 我试图为此找到一个解释 但没有成功 请帮忙 我不知道出了什么问题 在控制器 java中 FXML private TableView
  • 如何使 llvm jit 在 MSVC++ 中工作

    看来 LLVM 中的 Kaleidoscopy 示例已经被破坏了 至少在 MSVC x64 中已经被破坏了一段时间 也许几个月 出于同样的原因 它在 MCJIT 和新的 Orc JIT 框架中不起作用 Get the address of
  • 根据关联模型的总和对玩家进行排序

    我有一个6500的数据库players每个玩家平均有15场比赛results Use case 我想生成一个玩家列表 按以下顺序排序sum他们的prize金钱 结果表中的一个字段 我更喜欢它在某种范围内 所以我还可以过滤玩家所在国家 地区的
  • 链接 PHP PDO 查询

    我不确定 链接 是否是正确的术语 但我要问的是是否可以进行类似于此 MySQLi 查询的 PDO 查询 sql mysqli fetch object db gt query SELECT username FROM member WHER
  • 由于 JavaScript 中不保证对象中的属性顺序,JSON.stringify() 的实际行为如何?

    Since JavaScript 中不保证对象中的属性顺序 如何JSON stringify 实际上表现如何 以下内容总是正确的 同一对象 吗 const o a 1 b 2 console log JSON stringify o JSO
  • ESRI:无法解析源映射

    我在 Google Chrome 开发者控制台中收到此错误 无法解析 SourceMap http localhost 15132 Scripts External igniteui css themes infragistics infr
  • https url 中的用户名和密码

    考虑一下网址 https foo 电子邮件受保护 上例中的用户名 密码部分是否符合 URL 参数 的条件 如中所定义这个问题 当您将用户名和密码放在主机前面时 该数据不会以这种方式发送到服务器 相反 它会根据所使用的身份验证模式转换为请求标
  • 如何用 SPS 和 PPS 数据填充 AVCodecContext 的“extradata”字段?

    问题是这样的 当解码 H264 流时ffmpeg 我可以获得SPS和PPS的原始数据 但我不知道如何将它们填充到extradata现场AVCodecContext 没有extradata 我无法正确解码帧 每次我打电话avcodec dec
  • 解析lxml中的html正文片段

    我正在尝试解析 html 片段 h1 title h1 img src I use lxml html fromstring 这让我发疯 因为它不断剥夺我的片段的标签 gt lxml html fromstring h1 a h1 tag