数据提取-lxml模块

知识点

  • 了解lxml模块和xpath语法的关系
  • 了解lxml模块的使用场景
  • 了解lxml模块的安装
  • 了解 谷歌浏览器xpath helper插件的安装和使用
  • 掌握xpath语法-基础节点选择语法
  • 掌握xpath语法-节点修饰语法
  • 掌握xpath语法-其他常用语法
  • 掌握lxml模块中使用xpath语法定位元素提取属性值或文本内容
  • 掌握lxml模块中stree.tostring函数的使用
1. 了解lxml模块和xpath语法

对html或xml形式的文本提取特定内容,需要lxml模块的xpath语法

  • lxml模块可以利用XPath规则语法,来快速定位HTML,XML文档中特定元素以及获取节点信息(文本内容、属性值)
  • XPath(XML Path Language)是一门在HTML、XML文档中查找信息的语言,可用来在HTML、XML文档中对元素和属性进行遍历
  • 提取xml、html中的数据需要lxml模块和xpath语法配合使用
2. xpath语法-基础节点选择语法
表达式描述
/从根节点选取、或者是元素和元素之间的过渡
//从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
.选取当前节点
..选取当前节点的父节点
@选取属性
text()选取文本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. xpath语法-节点修饰语法
  1. 通过索引修饰节点
    /html/body/div[3]/div/div[1]/div
    /html/body/div[3]/div/div[1]/div[3]
    /html/body/div[3]/div/div[1]/div[last()]       选中最后一个
    /html/body/div[3]/div/div[1]/div[last()-1]      选中倒数第二个
    /html/body/div[3]/div/div[1]/div[position()>=10]     范围选择
  2. 通过属性值修饰节点
    //div[@id=“content-left”]/div/@id    出现在[]中的@是使用标签属性名和属性值修饰节点,出现在结尾的/@是取属性值
  3. 通过子节点的值修饰节点
    //span[i>2000]
    //div[span[2]>=9.4]
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 通过包含修饰
    //div[contains(@id,"")
    在这里插入图片描述
    //span[contains(text(),“无限”)]
    在这里插入图片描述
4.lxml使用
from lxml import etree

text = '''
<div>
    <ul>
        <li class="item-l"><a href="link1.html">first item</a></li>
        <li class="item-l"><a href="link2.html">second item</a></li>
        <li class="item-inaction"><a href="link3.html">third item</a></li>
        <li class="item-l"><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)
print(html.xpath('//a/text()'))
print(html.xpath('//a[@href="link1.html"]/text()')[0])
print(html.xpath('//a/@href'))
text_list = html.xpath('//a/text()')
href_list = html.xpath('//a/@href')

#for text in text_list:
#    #print(text, text_list.index(text))
#    myindex = text_list.index(text)
#    link = href_list[myindex]
#    print(link)

#for text,link in zip(text_list,href_list):
#    print(text,link)

el_list = html.xpath('//a')

for el in el_list:
    print(el.xpath('./@href'))
    print(el.xpath('./text()'),el.xpath('./@href'))
    print(el.xpath('.//text()'),el.xpath('.//@href'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值