python中lxml使用方式

来源:互联网 发布:刺客信条6枭雄优化 编辑:程序博客网 时间:2024/04/28 02:02

前言

前面已经学习了requests和beautifulsoup库的知识,大家可以看,,今天再来学习一下用一种网页解析的库lxml。

lxml是Python语言里和XML以及HTML工作的功能最丰富和最容易使用的库。lxml是为libxml2和libxslt库的一个Python化的绑定。它与众不同的地方是它兼顾了这些库的速度和功能完整性,以及纯Python API的简洁性,大部分与熟知的ElementTree API兼容但比之更优越。

lxml库的安装

pip install lxml

利用 pip 安装即可

lxml库的简单用法

首先我们利用它来解析 HTML 代码,先来一个小例子来感受一下它的基本用法。

fromlxml importetree

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)

首先我们使用 lxml 的 etree 库,然后利用 etree.HTML 初始化,然后我们将其打印出来。其中,这里体现了 lxml 的一个非常实用的功能就是自动修正 html 代码,大家应该注意到了,最后一个 li 标签,其实我把尾标签删掉了,是不闭合的。不过,lxml 因为继承了 libxml2 的特性,具有自动修正 HTML 代码的功能。

<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 标签。

文件读取

除了直接读取字符串,还支持从文件读取内容。比如我们新建一个文件叫做 hello.html,内容为

<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"><spanclass="bold">third item</span></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>

利用 parse 方法来读取文件,同样可以得到相同的结果。

fromlxml importetree

html =etree.parse('hello.html')

result =etree.tostring(html,pretty_print=True)

print(result)

实例测试

以上一段程序为例。

(1)获取所有的 li 标签

fromlxml importetree

html =etree.parse('hello.html')

printtype(html)

result =html.xpath('//li')

printresult

printlen(result)

printtype(result)

printtype(result[0])

#运行结果

<type'lxml.etree._ElementTree'>

[<Element li at 0xc54f288>,<Element li at0xc56e888>,<Element li at 0xc541408>,<Element li at0xced7e88>,<Element li at 0xced7508>]

5

<type'list'>

<type'lxml.etree._Element'>

可见,etree.parse 的类型是 ElementTree,通过调用 xpath 以后,得到了一个列表,包含了 5 个 li 元素,每个元素都是 Element 类型。

(2)获取 li 标签的所有 class

result =html.xpath('//li/@class')

printresult

#运行结果

['item-0','item-1','item-inactive','item-1','item-0']

(3)获取 li 标签下 href 为 link1.html 的 a 标签

result =html.xpath('//li/a[@href="link1.html"]')

printresult

#运行结果

[<Element a at 0xc522a88>]

(4)获取 li 标签下的所有 span 标签

因为 / 是用来获取子元素的,而 span 并不是 li 的子元素,所以,要用双斜杠。

result =html.xpath('//li//span')

printresult

#[<Element span at 0x10d698e18>]

(5)获取 li 标签下的所有 class,不包括 li

result =html.xpath('//li/a//@class')

printresult

#['bold']

(6)获取最后一个 li 的 a 的 href

result =html.xpath('//li[last()]/a/@href')

printresult

#['link5.html']

(7)获取倒数第二个元素的内容

result =html.xpath('//li[last()-1]/a')

printresult[0].text

# fourth item

(8)获取 class 为 bold 的标签名

result =html.xpath('//*[@class="bold"]')

printresult[0].tag

# span

小结

希望通过上面的内容能帮助大家深刻理解和学习Python爬虫。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。


转自 http://www.sohu.com/a/128890301_624356


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 wwqqtm77777 幼珍阁btmp4 5177tv永久线路 www.99nbec.com yy9480看电影 www.66628.com 凤求凰cdkey兑换码 seo1短视频在线播放 章子怡被老外燥过图片 www.savbus.在线视频 98福利网电影网 动漫专区全集1页 母乳锱缱糇裟久飨5诙集 干翻天了佐佐木明希中文字幕 动漫卡动1页 艳姆1一6在线播放神马 f母动漫1-6全集中文 艳福官途抱紧女领导完整章节 专偷当官老婆完整 官途欲妇 女市长权色官途 十大经典官场小说 公认十大最好看官场小说 官色爆香 重生无罢 十大经典官场小说推荐文库 人民的名义 周梅森 非常秘书 洞房不败 杨丽红被领导日疼了 官道之活色生香 木元素 权色官途 飘逸居士 youjombileftree幼儿 杨幂ps黄照 杨幂暴光裸 棵身照片大全 现场催奶视频 杨幂穿透视内裤从正面看图片 1分10秒 杨幂九九视频手机在线看 杨幂被日动图 杨幂都脱了手不遮挡露出命根的照片 李小璐床震视频 尺寸太大宝贝慢慢来h