lxml 相关问题

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

将属性插入位置

我需要使用 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

lxml/Python:获取上一个兄弟姐妹

我有以下html: 标题 1 啊啊 ... 我有以下html: <div id = "big"> <span>header 1</span> <ul id = "outer"> <li id = "inner">aaa</li> <li id = "inner">bbb</li> </ul> <span>header 2</span> <ul id = "outer"> <li id = "inner">ccc</li> <li id = "inner">ddd</li> </ul> </div> 我希望它按顺序循环播放: header 1 aaa bbb header 2 ccc ddd 我尝试循环遍历每个 ul,然后打印标题和 li 值。但是,我不知道如何获取与 ul 关联的 span 标头。 sets = tree.xpath("//div[@id='big']//ul[@id='outer']") for set in sets: # Print header. Not sure how to get it header = set.xpath(".//li/preceding-sibling::span") print header # Print texts. This works. values = set.xpath(".//li//text()") for v in values: print v 仅循环所有文本节点是行不通的,因为我需要知道它是标题还是 li 值。 这有效: header = ingred_set.getprevious().xpath(".//text()")[0] 对于 HTML,请使用 BeautifulSoup。它让您可以直接访问上一个和下一个兄弟姐妹: sibling_soup.b.next_sibling # <c>text2</c> sibling_soup.c.previous_sibling # <b>text1</b> 此外,你可以告诉 BS 在 constructor 中使用 lxml 解析器。从实践中我可以看出,在格式不正确的输入中,lxml比默认的html.parser表现更好

回答 2 投票 0

如何使用lxml通过文本查找元素?

假设我们有以下 html: 文本A 文本B ...

回答 2 投票 0

Python LXML:如何删除两个指定标签之间的所有标签?

我有一个 xml 文件(word.docx 文件的 document.xml),我需要从中删除某些部分。 结构是这样的: 我有一个 xml 文件(word.docx 文件的 document.xml),我需要从中删除某些部分。 结构是这样的: <?xml version='1.0' encoding='UTF-8' standalone='yes'?> <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <w:body> <w:p> Bunch of nested tags </w:p> <w:p> Bunch of nested tags to delete </w:p> <w:p> Bunch of nested tags to delete </w:p> <w:tbl> Bunch of nested tags to delete </w:tbl> <w:p> Bunch of nested tags </w:p> </w:body> </document> 我想删除 2 个指定边界标签之间的所有标签及其所有内容。 我想包含 startTag 并排除 endTag,并删除之间的所有内容。 我的两个边界标签是 标签,在 标签之间还有一堆其他标签,例如 标签,我也想删除它们。 我的问题是我不知道如何删除所有这些标签。 有什么帮助吗? 期望的输出是: <?xml version='1.0' encoding='UTF-8' standalone='yes'?> <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <w:body> <w:p> Bunch of nested tags </w:p> <w:p> Bunch of nested tags </w:p> </w:body> </document> 这是我尝试过的: 我成功获得了边界标签: startTag = parentBoundaryTags[3] endTag = parentBoundaryTags[4] 边界标签值为: <Element p at 0x12cf32ccfa0> <Element p at 0x12cf32ccff0> 我尝试获取边界标签的共同父级,因为根据我的研究,我似乎需要它来删除其下面的元素: common_ancestor = startTag.getparent() common_ancestor 值为: <Element body at 0x12cf32cccd0> 这对我来说很有意义,因为它对应于我的 xml 结构;这就是我期望看到的。 我使用 getchildren() 来迭代 标签的所有直接子代。 我正在尝试删除 标签的所有直接子代,从 标签的直接子代相当于我的 startTag 边界标签的点开始。 我正在尝试继续删除 的直接子级,直到到达相当于我的 endTag 边界标记的直接子级。 # Flag to indicate whether to start removing elements start_removal = False # List to store elements to be removed elements_to_remove = [] # Iterate over the children of the common ancestor for child in common_ancestor.getchildren(): if child == startTag: start_removal = True elements_to_remove.append(child) elif child == endTag: start_removal = False break elif start_removal: elements_to_remove.append(child) # Remove the collected elements for element in elements_to_remove: common_ancestor.remove(element) # Write the modified XML tree back to the document.xml file tree.write(document_xml, encoding='utf-8', xml_declaration=True) 我希望这会删除边界标签之间的所有标签,但它根本没有删除任何内容。 有人可以帮忙吗? 这是一个基于XSLT的解决方案。 它使用所谓的“身份转换”模式。 输入XML <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <w:body> <w:p>Bunch of nested tags</w:p> <w:p>Bunch of nested tags to delete</w:p> <w:p>Bunch of nested tags to delete</w:p> <w:tbl>Bunch of nested tags to delete</w:tbl> <w:p>Bunch of nested tags</w:p> </w:body> </w:document> XSLT <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes" standalone="yes"/> <xsl:strip-space elements="*"/> <!--Identity transform--> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="w:body/w:*[position() != 1 and position() != last()]"/> </xsl:stylesheet> 输出XML <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <w:body> <w:p>Bunch of nested tags</w:p> <w:p>Bunch of nested tags</w:p> </w:body> </w:document> Python import lxml.etree as lx # PARSE XML AND XSLT doc = lx.parse("Input.xml") style = lx.parse("Style.xslt") outfile = "Output.xml" # CONFIGURE AND RUN TRANSFORMER transformer = lx.XSLT(style) result = transformer(doc) # OUTPUT TO FILE with open(outfile, "wb") as f: f.write(result)

回答 1 投票 0

lxml xpass 在 xml 中找不到第一个标签下方的标签

我有一个 xml 文档,看起来像这样 ... ... ...

回答 1 投票 0

无法使用架构验证 XML,但可以通过从中读取写入的文件来工作

我目前正在使用 lxml 并想要验证 XML 内容。 我从 tei = etree.Element("TEI", nsmap={None: 'http://www.tei-c.org/ns/1.0'} 完全用 Python 编写,有很多子元素...

回答 1 投票 0

如何匹配 XPath (lxml) 中元素的内容?

我想使用 XPath 表达式通过 lxml 解析 HTML。我的问题是匹配标签的内容: 例如给定 示例 元素我可以...

回答 2 投票 0

使用 lxml.objectify 替换节点文本,同时保留属性

像这样使用lxml.objectify: 从 lxml 导入对象化 o = objectify.fromstring("oldtext") o.b = '新文本' 结果新...

回答 2 投票 0

在 lambda 上使用 Zeep[xmlsec]

我一直在尝试部署一个需要 zeep[xmlsec] 才能工作的 lambda 函数,但此时我无法安装 xmlsec 要求,因为我正在尝试部署一个查询肥皂的 lambda

回答 1 投票 0

Python XMLSyntaxError:需要开始标记,'<' not found, line 1, column 1

我正在尝试使用 lxml 读取 XML 文件,但我不断收到此错误: XMLSyntaxError:需要开始标记,'<' not found, line 1, column 1 my code: import lxml parser16= lxml.etree.XMLParser(

回答 1 投票 0

lxml.etree:需要开始标记,'<' not found, line 1, column 1

我想获取一些简单的 xml 文件并将它们一次性全部转换为 CSV(尽管此代码一次只适用于一个)。在我看来,好像没有官方名称空间,但我不确定。 我...

回答 2 投票 0

将 lxml.etree 导入到 python 时出现错误

我在我的Mac上安装了一个lxml,当我像这样输入python时 本地主机:lxml-3.0.1 苹果$ python Python 2.7.3(v2.7.3:70274d53c1dd,2012 年 4 月 9 日,20:52:43) [GCC 4.2.1(Apple Inc. build 5666)...

回答 5 投票 0

lxml 导入失败,错误“在平面命名空间‘_xsltDocDefaultLoader’中找不到符号”

使用代码: 从 lxml.etree 导入 HTML、XML 我得到回溯: 回溯(最近一次调用最后一次): 文件“/Users/username/code/project/lxml-test.py”,第 3 行,位于 ...

回答 3 投票 0

在 Django 视图中签名 XML 会为新建的 docker 镜像呈现 Nginx 502 错误网关,但不会为旧镜像呈现

我的 Django 应用程序的所有视图都按预期工作,与签名 XML 相关的视图除外。 在新 Ub 上运行时,这些视图(特别是我的 SAML 元数据视图)返回 502 Bad Gateway 错误...

回答 1 投票 0

无法导入模块“lambda_function”:无法从“lxml”导入名称“etree”(/opt/python/lib/python3.11/site-packages/lxml/__init__.py)

我尝试在 AWS Lambda 中运行使用 lxml 库的 Python 脚本,但遇到导入错误: 回复 { "errorMessage": "无法导入模块 'lambda_functi...

回答 1 投票 0

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