Python爬虫解析html:lxml的HtmlElement对象获取和设置inner html

Python的lxml是一个相当强悍的解析html、XML的模块,最新版本支持的python版本从2.6到3.6,是写爬虫的必备利器。它基于C语言库libxml2 和 libxslt,进行了Python范儿(Pythonic)的绑定,成为一个具有丰富特性又容易使用的Python模块。虽然特性丰富,但是它在修改数节点时又缺少了些接口,比如本文讲到的获取 inner html 和 设置(修改)inner html功能。

1. lxml.html解析网页简介

解析网页的html一般使用lxml.html模块,步骤很简单分三步走:

(1) 导入模块:

(2) 把html转换为html document 树,根节点就是标签:

(3) 使用xpath查找要提取的节点:

以上三步分成简洁,实际使用中,可能要反复第三部,通过不同的xpath获得不同的节点进行数据提取。

可以说,lxml解析(只读模式)html的功能又强大又方便。但是,如果需要修改(写模式)某些节点的html就有点困难了,它在这方面提供的API很少,只有修改节点tag属性的API,比如修改节点的class,id,href等属性是可以的。

那么如何操作节点的实际html字符串呢?

2. 获取节点的inner html

那么,什么是inner html呢?首先,我们来看一段html代码示例:

这是div

节点

内容

对于div 这个html标签节点,它的inner html就是:

这是div节点内容

即该标签包含的所有内容;而包含div标签在内的全部示例代码就是div的outer html。

明白了inner html 和 outer html的概念,我们就着手获取它们。

3. 设置节点的inner html

设置inner html相较于获取更复杂一些,我们还是以上面那段html代码为例:

这是div节点内容

假设我们要把它的inner html 改成如下字符串:

this is divnodetext

则操作步骤是:

清空节点div里面的内容:包括它的text和子节点

把新的inner html转变成fragments

把fragments加到清空后的div节点

把以上步骤写出Python函数就是:

通过以上函数就可以成功把node里面的内容设置成想要的html内容,适合在动态修改网页结构内容时使用。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181022G1PGPP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券