【Python模块学习】lxml库以及XPath的学习

lxml库

lxml库是一款 Python数据解析库(用作数据提取)。也就是将html 或 xml 数据进行解析。为后续的正则匹配奠定基础

1.lxml.etree

在lxml库中,出场率最高的就是 lxml.etree,其次就是 Element 对象,在数据解析的时候,大量的代码就是基于 Element 对象的 API 进行解析的

在爬虫的过程中,通过 etree.HTML 直接将 字符串 实例化为 element 对象

2.子节点与子孙节点

etree.HTML 返回的是html,是一个 Element 对象,但是一个有索引,可以 print(etree1[1])

etree.HTML 包含了子节点,因此可以通过循环的方式,遍历所有的子节点。如果想继续遍历子节点的子节点,可以通过双重for循环的方式

遍历子节点

import requests
from lxml import etree

response = requests.get('http://www.jsons.cn/zt/')
response.encoding='utf-8'
html = response.text
etree1 = etree.HTML(html)
print(html)
print(etree1)
print(etree1.tag)
print(type(etree1))
print('-'*60)

输出所有的标签,并且返回字符串的形式
for child in etree1:
    for sun in child:
		#print(sun.tag)                         # 只输出标签值,例如meta、link等
        print(etree.tostring(sun))              # 以字符串的形式输出 b'String'

在这里插入图片描述

3.XPath-数据提权(重点)

其中包含了很多的函数,从 etree.HTML 对象中 匹配出合适的内容

XPath 基本语法

表达式描述
nodename选取此节点的所有子节点
/从根节点选取
//从任意位置匹配(不用写出完整的路径)
.选取当前节点
选取当前节点的父节点
@选取属性

XPath 基本用法

  • 可以直接使用 etree.tml.xpath(‘xpath表达式’) 获取网页的相关数据

  • 通过etree.xpath获取 element对象(element对象是列表),然后利用其text属性获取对应的文本内容,注意element对象是文本的形式

    eg:  etree.xpath('body')[0][0].text
    

代码示例

注意 下面的的这行代码 print(etree1.xpath('//body/h2/text()'))

我们这样写 print(etree1.xpath('//body')[0][0].text) ,因为 etree.xpath 是一个element(列表)的格式

但是推荐前者,更容易上手,面对复杂的网页结构也能游刃有余。

import requests
from lxml import etree

#reponse = requests.get('http://www.jsons.cn/zt/')

reponse = requests.get('http://127.0.0.1/crawler/spider.html')
reponse.encoding='utf-8'
html = reponse.text
etree1=etree.HTML(html)

#print(html)

print(etree1)
print(etree1.xpath('//body/h2/text()'))         #获取网页 指定标签的内容
print('-'*60)
print(etree1.xpath('string()'))     #只获取标签值(也就是呈现在网页上的内容)

在这里插入图片描述

4.find函数

iterfind()          返回查到的数据,迭代器x形式返回
findall()           返回匹配到的列表
find()              返回第一个匹配到的数据
findtext()          返回匹配到的文本数据,第一个

代码演示

print(etree1[0].find('title').text)
print(etree1[1].findall('*')[0].text)

参考文章

lxml文章:https://dream.blog.csdn.net/article/details/119633672

XPath简单使用视频:https://www.zhihu.com/search?type=content&q=xpath%E4%BD%BF%E7%94%A8

XPath基础:https://www.w3school.com.cn/xpath/xpath_syntax.asp

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Buffedon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值