上一章我们讲了使用BeautifulSoup对象来解析爬虫过程中下载的网页,而今天要讲的是使用另一个扩展库lxml来完成网页的解析。同样,lxml库可以完成html和xml格式的文件解析,可以用来解析大文档,解析速度也比较快。要掌握lxml的使用,就需要掌握xpath的使用,因为lxml扩展库是基于xpath的,所以本章的重点主要放在xpath语法的使用上。1.导入lxml扩展库并创建对象1#-*-coding:UTF-8-*-23#importetreefromlxml4fromlxmlimportetree56#首先获取web下载的网页源码pagedownloader7#这里直接拿官方案例8html_doc="""9
睡鼠的故事1011
睡鼠的故事1213从前有三个小姐妹;她们的名字叫14Elsie,15Lacie和16Tillie;17他们住在一口井底1819...20"""2122#初始化网页下载器的html_doc字符串,返回一个lxml对象23html=etree.HTML(html_doc)2.使用xpath语法提取网页元素根据节点方式获取元素1#xpath()使用标签节点获取元素2printhtml.xpath('/html/body/p')3#[,,]4printhtml.xpath('/html')5#[]6#在当前节点的后代中查找节点7printhtml.xpath('//a')8#在当前节点的子节点中查找html节点9printhtml.xpath('/html')过滤2获取元素1'''单属性获取元素3'''4#获取子节点中属性class=bro的a标签5printhtml.xpath('//a[@class="bro"]')67#获取属性id=link3的a标签后代节点中8printhtml.xpath('//a[@id="link3"]')910'''11根据多个属性获取元素12'''13#获取class属性等于的a标签sisterandwhoseidequaltolink314printhtml.xpath('//a[contains(@class,"sister")andcontains(@id,"link1")]')1516#获取等于bro的class属性,或者id等于link1的a标签17printhtml.xpath('//a[contains(@class,"bro")orcontains(@id,"link1")]')1819#使用last()函数对克et后代20printhtml的a标签的最后一个标签。xpath('//a[last()]')21#使用1函数获取后代a标签的第一个a标签22printhtml.xpath('//a[1]')23#标签过滤,position()获取后代a标签的前两个a标签24printhtml.xpath('//a[position()<3]')2526'''27使用计算方法获取多个元素28'''29#标签筛选,position()得到后代a标签的第一个和第三个标签30#可以使用的计算表达式:>,<,=,>=,<=,+,-,and,or31printhtml.xpath('//a[position()=1orposition()=3]')获取元素1的属性和文本'''2使用@获取属性值,使用text()获取标签文本3'''4#获取属性值5printhtml.xpath('//a[position()=1]/@class')6#['sister']7#获取标签8printhtml的文本值。xpath('//a[position()=1]/text()')更多精彩前往微信公众号【Python集中营】,关注python技术栈,数据获取,交流社区,干货分享,期待你的加入~