lxml中etree.HTML()和etree.tostring()用法

etree.HTML():构造了一个XPath解析对象并对HTML文本进行自动修正。
etree.tostring():输出修正后的结果,类型是bytes
可参考以下代码:

from lxml import etree
text = '''
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a>
     </ul>
 </div>
'''
html = etree.HTML(text)
result = etree.tostring(html)
print(result.decode('utf-8'))

这里首先导入lxml库的etree模块,然后声明了一段HTML文本,调用HTML类进行初始化,这样就成功构造了一个XPath解析对象。这里需要注意的是,HTML文本中的最后一个li节点是没有闭合的,但是etree.HTML模块可以自动修正HTML文本。
这里我们调用tostring()方法即可输出修正后的HTML代码,但是结果是bytes类型。这里利用decode()方法将其转成str类型,结果如下

<html><body><div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a>
     </li></ul>
 </div>
</body></html>

可以看到,经过处理之后,li节点标签被补全,并且还自动添加了body、html节点。

参考:崔庆才的Python3网络爬虫开发实战

  • 22
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 将lxml.etree._element对象转换为字符串,可以使用lxml.etree.tostring()函数。例如: ```python from lxml import etree root = etree.Element("root") child = etree.SubElement(root, "child") child.text = "Hello, World!" xml_str = etree.tostring(root, encoding="unicode") print(xml_str) ``` 输出结果为: ``` <root><child>Hello, World!</child></root> ``` ### 回答2: lxml.etree._element是lxml的一个类,用于处理XML数据。而将其转换为字符串可以方便地在程序使用、存储或显示数据。 转换方法主要有两种: 一、使用ET.tostring()方法 ET.tostring()方法可以将lxml.etree._element对象转换为二进制字节流,需要使用decode()方法将其从二进制转换为字符串。例如: ``` python from lxml import etree as ET root = ET.Element('root') child = ET.SubElement(root, 'child') child.text = 'hello' element_str = ET.tostring(root, encoding='utf8', method='xml').decode() print(element_str) ``` 输出结果为: ``` xml <root><child>hello</child></root> ``` 二、使用ET.Element.text属性 lxml.etree._element对象的text属性可以直接获取其子元素的字符串内容,因此可以递归获取其所有子元素的字符串内容。例如: ``` python from lxml import etree as ET root = ET.Element('root') child = ET.SubElement(root, 'child') child.text = 'hello' def element_to_str(element): if len(element) == 0: return element.text children = [] for child in element.iterchildren(): children.append(element_to_str(child)) return ''.join(children) element_str = element_to_str(root) print(element_str) ``` 输出结果为: ``` python hello ``` 总之,将lxml.etree._element转换为字符串可以使用ET.tostring()方法或递归访问其子元素的text属性,这样可以方便地处理XML数据。 ### 回答3: lxml.etree._element是lxml的一个元素类型,通常用来表示XML文件的节点。将其转换为str类型,可以方便地将XML节点的内容进行处理和分析。 首先,可以使用lxmltostring函数来将_lxml.etree._element对象转换为bytes类型的XML字符串。具体代码如下所示: ```python from lxml import etree element = etree.Element('root') element.text = 'Hello, World!' xml_bytes = etree.tostring(element) ``` 以上代码首先创建了一个名为root的XML节点,并将其的文本内容设置为'Hello, World!'。然后,使用etree.tostring函数将该节点转换为bytes类型的XML字符串,并将结果存储到变量xml_bytes。 如果想将bytes类型的XML字符串转换为str类型,可以使用bytes对象的decode方法,例如: ```python xml_str = xml_bytes.decode('utf-8') ``` 以上代码将前面生成的xml_bytes对象解码为utf-8编码的字符串,并将其存储到变量xml_str。 另一种方法是直接使用lxml的parse函数来解析XML文件,将其转换为ElementTree对象,并使用该对象的tostring函数将其转换为bytes类型的XML字符串。具体代码如下所示: ```python from lxml import etree tree = etree.parse('example.xml') root = tree.getroot() xml_bytes = etree.tostring(root) ``` 以上代码首先使用etree.parse函数解析名为example.xml的XML文件,并获取其根节点。然后,使用根节点的tostring函数将其转换为bytes类型的XML字符串,并将结果存储到变量xml_bytes。 再次强调一下,以上方法返回的是XML的字符串形式,如果想要对其内容进行相关分析,需要进一步解析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值