lxml 相关问题

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

如何在XML Python中迭代子元素的子元素?

我有一个XML结构,如下: [[[[[[]]

回答 1 投票 -1

我的Amazon scraper随机停止在服务器上工作(带有代理),但在家用PC上与相同的代理一起使用

我的亚马逊刮板工作正常,当我突然发疯时,我开始获取验证码。但是,当我在家用PC上运行脚本时,它运行得很好。在两种情况下,我都使用相同的代理。这个...

回答 1 投票 0


如何在网站上单击CSV按钮并以python下载数据

我正在尝试从以下网站下载CSV和JSON数据:https://worldpopulationreview.com/countries/countries-by-gdp/#worldCountries如何模拟单击csv文件?以...

回答 2 投票 -1

检测段落在XML转换的PDF(Python)中中断]]

我有这个PDF文件,其中包含那些“长”空格(在下图中以黄色突出显示)。我的目标是检测它们,以便我可以将这些空格周围的文本段分开。到目前为止,我的...

回答 1 投票 0

通过XPATH通过LXML查找元素-Python

我在使用LXML抓取某些Web数据时遇到一些问题。我想使用BeautifulSoup从网站上抓取一件事,所以我决定使用LXML。我写了一些代码,得到了不和谐...

回答 1 投票 0

我如何基于子元素中的文本删除XML文件中的父节点?使用Python 3.6

现在,我正在尝试在Python 3.6中使用lxml。我想删除“程序”(如果它们包含对冲),并且如果它们都不包含“ keep”,则完全删除“请求”。 xml是结构化的...

回答 2 投票 0

参考熊猫数据框替换XML中的元素

我正在使用lxml读取以下文件: >

回答 1 投票 0

[lxml find方法无论是在构建树还是在解析文件时,其操作方式都不同

我正在编写一些Python代码,有时会从头开始构建xml树,有时会解析现有的xml并对其进行更新或报告。我遇到的问题是lxml查找和findall ...

回答 1 投票 0

lxml.etree.SerialisationError:使用cabby / libtaxii时出现IO_ENCODER错误

我工作的公司有一个生产的TAXII服务器(使用STIX 1.1.1),不能与某些客户的客户TAXII实现一起使用,因此我正在开发一个测试服务器以尝试工作...

回答 1 投票 0

提高使用元素和名称空间将XML解析为Pandas的速度

所以我有一个52M的xml文件,其中包含115139个元素。从lxml导入etree树= etree.parse(文件)根= tree.getroot()在[76]中:len(root)Out [76]:115139我具有此功能,即...

回答 3 投票 1

删除字典条目不起作用(Python),为什么?

我有这样的代码,从输入的XML文件开始,将标签的子元素的索引和作为键的子元素的索引存储在字典中;删除其值包含某个特定键的键...

回答 1 投票 0

使用beautifulsoup将html表转换为CSV

我对抓取是陌生的,我无法弄清楚如何从某个网站获取所需的数据。这是我的代码:从lxml导入html从bs4导入html导入请求BeautifulSoup导入熊猫...

回答 2 投票 0

在etree.parsed()之后无法从XML获取值

所以我用lxml解析了一个xml文件。从lxml中导入import etree在[5]中:root = etree.parse(fileXml)在[6]中:root Out [6]: 如您所见,...

回答 1 投票 0

如何在XML Python中的同一父级中基于相同标签的元素进行连接?

我有一个这样的长XML结构: [[[[[]]]]]]]]]] >> 您可以尝试以下方法: 迭代所有new_line元素。对于所有这些new_lines: 查找所有子元素text并将其保存在列表中。 使用text_list使用当前元素和先前元素遍历zip(有关更多详细信息,请参见this discussion:zip(l[:-1], l[1:]) 获取当前和上一个元素的大小 如果它们相等且不都为null: 获取当前和先前的文本 将它们添加到当前元素 使用remove删除上一个元素 代码 import lxml.etree as etree parser = etree.XMLParser(remove_blank_text=True) tree = etree.parse('data.xml', parser) root = tree.getroot() # Iterate over //newline block for new_line_block in tree.xpath('//new_line'): # Find all "test" element in the new_line block list_text_elts = new_line_block.xpath('//text') # Iterate over all of them with the current and previous ones for previous_text, current_text in zip(list_text_elts[:-1], list_text_elts[1:]): # Get size elements prev_size = previous_text.attrib.get('size') curr_size = current_text.attrib.get('size') # If they are equals and not both null if curr_size == prev_size and curr_size is not None: # Get current and previous text pt = previous_text.text if previous_text.text is not None else "" ct = current_text.text if current_text.text is not None else "" # Add them to current element current_text.text = pt + ct # Remove preivous element new_line_block.remove(previous_text) newtree = etree.tostring(root, encoding='utf-8', pretty_print=True) newtree = newtree.decode("utf-8") output.xml<pages> <page id="1" bbox="0.000,0.000,462.047,680.315" rotate="0"> <textbox id="0" bbox="191.745,592.218,249.042,603.578"> <textline bbox="191.745,592.218,249.042,603.578"> <new_line> <text font="QKWQNQ+ImprintMTnum-Bold" bbox="272.661,554.072,277.415,564.757" colourspace="DeviceGray" ncolour="0" size="10.685">1</text> <text font="NUMPTY+ImprintMTnum" bbox="324.480,553.628,327.384,566.110" colourspace="DeviceGray" ncolour="0" size="12.482">sventura] </text> <text font="PYNIYO+ImprintMTnum-Italic" bbox="346.709,553.639,352.505,566.366" colourspace="DeviceGray" ncolour="0" size="12.727">sps. a</text> <text font="NUMPTY+ImprintMTnum" bbox="368.242,553.628,372.759,566.110" colourspace="DeviceGray" ncolour="0" size="12.482">mi-</text> </new_line> </textline> </textbox> </page> </pages> 我让您调整它来处理不同的页面!

回答 1 投票 1

如何在Python中获得XML中的第二个同级兄弟?

我有一个要迭代的XML。我需要找到特定节点的前一个节点(带有标签“ text”和属性“ bbox”)。问题是,我想指定标签是否没有“ bbox”属性,否则不能...

回答 1 投票 0

如何在Python中使用带有xPath的XML的同级兄弟?

我有一个这样的XML结构: [[[[[]]]]]]] 您的代码失败的原因是,与先前同级有关的轴名称是 preceding-sibling(不是preceding)。 但是在这里您不需要使用 XPath 表达式,因为存在本机lxml获取(第一个)前面的同级兄弟的方法,该兄弟称为getprevious。要检查对上一个 text 节点的访问,请尝试以下循环:for x in tree.xpath('//text'): bb = x.attrib.get('bbox') if bb is not None: bb = bb.split(',') print('This: ', bb) xPrev = x.getprevious() bb = None if xPrev is not None: bb = xPrev.attrib.get('bbox') if bb is not None: bb = bb.split(',') if bb is not None: print(' Previous: ', bb) else: print(' No previous bbox') 它为当前 text 元素和如果有的话,在兄弟姐妹之前。编辑如果需要,您还可以直接访问前面的 bbox 属性 text元素,调用x.xpath('preceding-sibling :: text [1] / @ bbox')。 但是请记住,此函数返回找到的节点的列表,如果没有,则返回已找到,此列表为 空 (不是无)。因此,在任何使用此结果之前,您必须: 检查返回列表的长度(应为> 0), 从此列表中获取第一个元素( bbox属性的文本内容,在这种情况下,此列表应仅包含1个元素), 由,分割(获取片段列表),检查此结果的第一个元素是否不为空, 转换为 float 。 之后您可以使用它,例如与当前bbox 中的相应值进行比较。 Python使用非常古老的XPath 1.0标准。在XPath 1.0中,“ //text[@bbox < preceding::text[1]/@bbox + 11] 您正在对@bbox值执行数字微分和数字加法。 但是@bbox不是数字,它是四个数字的逗号分隔列表: 179.739,592.028,261.007,604.510 将其转换为数字会产生NaN(非数字),并且NaN < NaN返回false。 要对这样的结构化属性值执行任何有用的操作,您确实需要XPath 2.0或更高版本。

回答 2 投票 0

删除XML文件开头的BOM表标记

我有一个XML文件,由于要使用lxml对其进行解析,因此我试图从中删除BOM。可以在此处找到文件的链接。一些简化的代码是:从lxml import etree f = ...

回答 2 投票 1

如何在窗口10中解决模块问题?

我在下面提到了代码;我使用python 3.7 idle运行此代码,该代码成功运行,但是当我将其另存为file.py并通过使用cmd运行它时,会弹出导入模块错误。我的代码:import ...

回答 1 投票 0

从HDFS读取XML文件以使用lxml.etree在Pyspark中进行解析

我已经使用lxml.etree用Python编写了一个解析器,现在我试图在Hadoop集群上运行所述解析器。当我在本地运行该函数时,它可以按预期工作,但是我收到以下错误...

回答 1 投票 0

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