lxml 相关问题

lxml是一个功能齐全的高性能Python库,用于处理XML和HTML。

根据多个兄弟条件选择兄弟节点值,不使用xpath字符串

使用 xpath 查找 xml 节点有多种答案,如下所示。在使用 lxml 的 python 中,是否有更 Pythonic 的方式来构建这个条件列表?我知道我可以使用...构建 xpath 字符串

回答 1 投票 0

lxml 获取没有标签的元素的文本

我正在使用 lxml 库和 python 来解析一个简单的 XML,该 XML 在本例中打印下一个元素的文本 HD,如下面的 XML 所示 有史以来最好的书...

回答 1 投票 0

如何将“用户数据”与 lxml.etree.Element 关联?

我目前正在将一些Python代码从DOM“移植”到lxml.etree,并且遇到了一个障碍:有问题的DOM代码使用Node.setUserData()和Node.getUserData API,但我找不到

回答 1 投票 0

如何在Python中获取没有值字段的textarea值

我正在尝试解析html页面并从文本区域获取值,但我无法实现它,我将放置我的代码(我从selenium开始,但它也不起作用)。我真的不明白这是哪里...

回答 1 投票 0

设置默认命名空间的前缀

我有 XML: 文字-1文字-2 我需要使用 lxml 设置默认命名空间的前缀: ...

回答 1 投票 0

类型错误:某些关键字参数意外

我正在尝试为页面编写一个解析器。我正在使用 LxmlSoup 库。 所以协议是: html = requests.get('https://www.mcdonalds.com/ua/uk-ua/eat/fullmenu.html').text 汤 = LxmlSoup(html) 网址=汤。

回答 1 投票 0

Python 中支持 XPath 2.0 的库

是否可以在Python中使用XPath 2.0函数,例如starts-with()、ends-with()和contains()?我试图使用 lxml 和 defusedxml,但不幸的是它们不支持任何这些功能......

回答 3 投票 0

无法在centos7.9上安装python 3.9的lxml包

我想在 Centos7.9 上的 Python 3.9 安装上安装 lxml 5.1.0 包 我尝试从 .targz 和 .whl 文件安装。 使用 .whl 文件时,出现以下错误消息: 错误:lx...

回答 1 投票 0

解析换行符( )在属性值中

我正在使用 lxml 库解析 xml 文档。有一个新行字符 ( )在属性值中: 从 lxml 导入 etree root = etree.fromstring(' 我正在使用 lxml 库解析 xml 文档。有一个新行字符 ( )在属性值中: from lxml import etree root = etree.fromstring('<root attr1="line1\nline2"/>') print(etree.tostring(root).decode()) 结果: <root attr1="line1 line2"/> 也就是说,解析器用空格替换换行符。有没有办法在解析时保留属性值中的换行符? 我知道您可以在创建 xml 时添加换行符: from lxml import etree root = etree.Element('root', attr1='line1\nline2') print(root.attrib['attr1']) print(etree.tostring(root).decode()) 结果: line1 line2 <root attr1="line1&#10;line2"/> 但是解析的时候怎么做呢? 我认为以下内容可以有所帮助: from lxml import etree, objectify root = objectify.fromstring('<root attr1="line1\nline2"/>') attr1_value = root.get('attr1') print(attr1_value) # Output: line1\nline2

回答 1 投票 0

使用 lxml 解析 DTD 时出错

我正在尝试编写一个验证脚本,用于根据 NITF DTD 验证 XML,http://www.iptc.org/std/NITF/3.4/specification/dtd/nitf-3-4.dtd。基于这篇文章,我想出了以下内容

回答 2 投票 0

‘/xad’出现在Python代码中的字符串列表中

首先,我是一个初学者,刚刚接触Python中级,所以请耐心等待我解决这个问题的方法。我正在使用 lxml etree 和请求开发一个网络抓取迷你项目......

回答 1 投票 0

XPath 使用超链接获取文本(Python)

我是 XPath 的新手(总的来说,我是 Python 的相对初学者)。我试图通过它从维基百科页面的第一段中取出文本。 以 Python 页面为例...

回答 2 投票 0

SAML 断言在SubjectConfirmationData 中不包含KeyInfo 元素

需要有关 SAML 断言的帮助。我们需要创建具有以下结构的主题元素:Subject>SubjectConfirmation>SubjectConfirmationData>KeyInfo>KeyValue>

回答 1 投票 0

Parsel 无法访问嵌套元素

我正在与 Parsel 合作。不幸的是,我无法解析 标签,它是另一个 标签的子标签(我知道, 中的 不是 HTML 标准)。我该如何处理...

回答 1 投票 0

将属性插入位置

我需要使用 lxml 库在正确的位置插入元素属性。 以下是我尝试在 attr3 属性前面插入 attr2 属性的示例: 来自 lxml 我...

回答 1 投票 0

TripAdvisor 网页抓取特定值是不可能的

我是网络抓取新手,希望从一些特定的 TripAdvisor 网站(例如此示例)获取特定值,我需要清洁度值,在本例中为 4.5。无论 H 的哪一部分...

回答 1 投票 0

如何从这个html中获取url?

我想用python和beautifulsoup从data-bem解析url,但我不能这样做,如何解决这个问题?使用selenium获取html,用beautifulsoup和data-bem解析,就像它不在...

回答 1 投票 0

如何插入带有文本的元素?

我可以插入这样的元素: Product_node.insert(cnt, etree.Element("vod_type")) 是否可以执行以下操作: Product_node.insert(cnt, etree.Element("vod_type").te...

回答 2 投票 0

解析请求响应时应该使用 .text 还是 .content?

我偶尔使用 res.content 或 res.text 来解析请求的响应。在我的用例中,我使用哪个选项似乎并不重要。 解析 HTML 的主要区别是什么...

回答 2 投票 0

如何在lxml中查找元素的直接子元素

我找到了一个具有特定类的对象: THREAD = TREE.find_class('线程')[0] 现在我想获取作为其直接子元素的所有 元素。 我试过: THREAD.findall("p") 线程.x... 我找到了一个具有特定类别的对象: THREAD = TREE.find_class('thread')[0] 现在我想获取其直接子元素的所有 <p> 元素。 我尝试过: THREAD.findall("p") THREAD.xpath("//div[@class='thread']/p") 但是所有这些都会返回此 <p> 内的所有 <div> 元素,无论该 <div> 是否是它们最近的父级。 我怎样才能让它发挥作用? 编辑: 示例 html: <div class='thread'> <p> <!-- 1 --> <!-- Can be some others <p> objects inside, which should not be counted --> </p> <p><!-- 2 --></p> </div> <div class='thread'> <p>[...]</p> <p>[...]</p> </div> 脚本应该找到两个对象<p>,它们是THREAD的子对象。我应该收到两个对象的列表,在示例 HTML 的注释中标记为“1”和“2”。 编辑2: 又一个澄清,因为人们会感到困惑: THREAD是存储在变量中的一些对象,可以是任何html元素。我想找到 <p> 对象,它们是 THREAD 的直接子对象。这些 <p> 不能位于 THREAD 外部,也不能位于 THREAD 内部的任何元素内部。 我不确定,但你的问题似乎出在 HTML 本身:请注意 有几个标签省略情况适用于 p 节点,因此段落的结束标签 <div class='thread'> <p>first <p>second</p> </p> </div> 简单地被解析器忽略,并且两个节点都被标识为兄弟节点,但不是父节点和子节点,例如 <div class='thread'> <p>first <p>second </div> 所以 XPath //div[@class="thread"]/p 会返回两个段落 您只需将 p 标签替换为 div 标签,您就会看到不同的行为: <div class='thread'> <div>first <div>second</div> </div> </div> 这里//div[@class="thread"]/div将仅返回第一个节点 如果我的假设不正确,请纠正我 尝试这个 XPath 表达式: //p[parent::div[@class='thread']] 或者用完整的Python表达式: THREAD.xpath("//p[parent::div[@class='thread']]") 另一种(逆)方法是这个 XPath 表达式: div[@class='thread']/child::p" 使用直接 child:: 轴并且仅选择直接子节点。 总结: 两个表达式中哪一个更快取决于 XPath 编译器。 child:: 是默认轴,如果没有给出其他轴则使用。 仅供参考:XPath 计数从 1 开始,并且 不是 0。 因此,关于您的 XML 示例,以下表达式 count(//div[@class='thread'][1]/child::p) 的结果是 2 - 计算 <p> <!-- 1 --> + <p><!-- 2 --></p> 的结果。 你可以尝试PARENT.getchildren() >>> root = etree.fromstring(xml) >>> root.xpath("//div[@class='thread']")[0].getchildren() [<Element p at 0x10b3110e0>, <Element p at 0x10b311ea8>]

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.