lxml是一个功能齐全的高性能Python库,用于处理XML和HTML。
lxml.etree.SerialisationError:使用cabby / libtaxii时出现IO_ENCODER错误
我工作的公司有一个生产的TAXII服务器(使用STIX 1.1.1),不能与某些客户的客户TAXII实现一起使用,因此我正在开发一个测试服务器以尝试工作...
所以我有一个52M的xml文件,其中包含115139个元素。从lxml导入etree树= etree.parse(文件)根= tree.getroot()在[76]中:len(root)Out [76]:115139我具有此功能,即...
我有这样的代码,从输入的XML文件开始,将标签的子元素的索引和作为键的子元素的索引存储在字典中;删除其值包含某个特定键的键...
我对抓取是陌生的,我无法弄清楚如何从某个网站获取所需的数据。这是我的代码:从lxml导入html从bs4导入html导入请求BeautifulSoup导入熊猫...
所以我用lxml解析了一个xml文件。从lxml中导入import etree在[5]中:root = etree.parse(fileXml)在[6]中:root Out [6]: 如您所见,...
如何在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> 我让您调整它来处理不同的页面!
我有一个要迭代的XML。我需要找到特定节点的前一个节点(带有标签“ text”和属性“ bbox”)。问题是,我想指定标签是否没有“ bbox”属性,否则不能...
我有一个这样的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或更高版本。
我有一个XML文件,由于要使用lxml对其进行解析,因此我试图从中删除BOM。可以在此处找到文件的链接。一些简化的代码是:从lxml import etree f = ...
我在下面提到了代码;我使用python 3.7 idle运行此代码,该代码成功运行,但是当我将其另存为file.py并通过使用cmd运行它时,会弹出导入模块错误。我的代码:import ...
从HDFS读取XML文件以使用lxml.etree在Pyspark中进行解析
我已经使用lxml.etree用Python编写了一个解析器,现在我试图在Hadoop集群上运行所述解析器。当我在本地运行该函数时,它可以按预期工作,但是我收到以下错误...
我如何列出预定的WebEx会议?这是WebElements元素: []
仅在给定标题的子字符串时,使用BeautifulSoup查找h3
我正在尝试从Jeopardy网站收集数据。特别是,我想从该站点的数据表中收集美元金额:在lxml中显示如下:我可以使用...
解析XML文件中的每个子节点时遇到问题。每个Instrument_Root的节点数可以更改。例如,Instrument_Watch在这里为NULL,但将填充在其他...
我尝试通过XPath获取HTML元素,我以此方式进行了尝试,但是它始终返回空字符串。谁能告诉我,我如何通过X路径获得Element?对于list_href_einrichtungen中的x:...
我有一些Python,我正在尝试从XML文档中剥离所有注释。到目前为止,这里是代码:tree = lxml.etree.parse(path_to_xml_file)for tree.xpath('// comment()'):c ....
我想在dic中提取HTML。例如在这段HTML中: Title ] 我要提取div内容: [ ] >> 对于XPath,使用专用功能string(): string(//div[@id='main']/h1/xyz) 输出:“标题” 编辑:如果要查找“标题”,则输出整个路径: concat(concat("<",name(//xyz[.="Title"]/parent::*),">"),concat("<",name(//xyz[.="Title"]),">"),string(//xyz[.="Title"]),concat("</",name(//xyz[.="Title"]),">"),concat("</",name(//xyz[.="Title"]/parent::*),">"))
我正在尝试使用以下代码lxml.html获取以下网址的href数据url = r'https://pubmed.ncbi.nlm.nih.gov/?term = COVID-19&filter = simsearch1.fha&page = 1' .fromstring(url).xpath('// div [...
想在xml的开头输出以下内容,我可以在解析和验证上找到很多,但是在创建/输出上找不到很多,我可以在QName上找到一些文档,但是如何输出`&...