Python21天学习挑战赛Day(15-16)·lxml库与Xpath提取网页数据


活动地址:CSDN21天学习挑战赛

目录

一,爬虫提取网页数据的流程

二,lxml库

        1.安装

        2.解析HTML网页

三,Xpath

        选取节点

        谓语 

         选取未知节点

         选取若干路径

         Chrome插件XPath Helper安装使用

安装

使用

        Xpath实战 

1.获取所有的标签

 2.获取标签所有class属性

3.获取

一,爬虫提取网页数据的流程

html字符串(python)——lxml库解析——HTML页面——Xpath提取——获取数据

二,lxml库

        lxml库是XML和HTML的解析器,主要功能为解析其中的数据,也可利用XPath语法定位特定的元素及节点信息

        1.安装

pip install lxml

        2.解析HTML网页

 主要使用lxml中的etree类                                                       

实例1——

from lxml import etree

text = '''
<html><body>
    <div class="friend">
        <div class="name">wen</div>
        <div class="good character">cute</div>
        <div class="height">184</div>
    </div>
</body></html>
'''
# 开始初始化
html = etree.HTML(text)  # 这里需要传入一个html形式的字符串
print(html)
print(type)
# 将字符串序列化为html字符串
result = etree.tostring(html).decode('utf-8')
print(result)
print(type(result))

输出——

<Element html at 0x1d3a7483640>
<class 'type'>
<html><body>
    <div class="friend">
        <div class="name">wen</div>
        <div class="good character">cute</div>
        <div class="height">184</div>
    </div>
</body></html>
<class 'str'>

进程已结束,退出代码0

实例2:读取并解析HTML文件——

        创建html文件

        

from lxml import etree

# 将html文件进行读取
html = etree.parse('index.html')

# 将html内容序列化
result = etree.tostring(html).decode('utf-8')
print(result)
print(type(result))
html = etree.HTML(result)  # 这里需要传入一个html形式的字符串
print(html)
print(type)

 输出——

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>python&#20043;lxml&#24211;</title>
</head>
<body>
<ul>
    <li name="&#26519;" class="student">19-year-old</li>
    <wi name="&#25991;" class="student">18-year-old</wi>
</ul>
<ul>
    <li love-food="&#35199;&#32418;&#26623;">&#29983;&#30340;</li>
    <wi love-food="&#26376;&#39292;">&#35910;&#27801;&#39301;</wi>
</ul>
<pr>
    <ul>
        <ti class="time">2018.9.5-2021.6.9</ti>
        <ti class="incident">we are good friends</ti>
    </ul>
</pr>
</body>
</html>
<class 'str'>
<Element html at 0x2117a800dc0>
<class 'type'>

进程已结束,退出代码0

三,Xpath

XPath(XML Path Language)是一门在xml文档中查找信息的语言,可用来在xml文档中对元素和属性遍历

        选取节点

常用路径表达式:

        谓语 

用于查找某个特定节点或者包含某个特定的值的节点,被嵌在方括号中。

         选取未知节点

XPath通配符可以用来选取未知的XML元素

         选取若干路径

        通过在路径表达式中使用‘|’运算符,可选取若干路径

         Chrome插件XPath Helper安装使用

插件下载地址:https://download.csdn.net/download/weixin_62599885/86401664

安装

         打开chrome——点击右上角(三个点)——更多工具——扩展程序——将插件拖入

使用

·点击碎片图案,选择XPath插件,选择固定

·定位爬取内容:按住x键,选中要爬取的信息即可获取标签路径

        Xpath实战 

依然使用上面的index.html文件

1.获取所有的<wi>标签

from lxml import etree

html = etree.parse('index.html')
print(type(html))  # 显示etree.parse() 返回类型

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

print(result)  # 打印<wi>标签的元素集合
print(len(result))
print(type(result))
print(type(result[0]))

输出——

<class 'lxml.etree._ElementTree'>
[<Element wi at 0x20e534f37c0>, <Element wi at 0x20e5370fb00>]
2
<class 'list'>
<class 'lxml.etree._Element'>

进程已结束,退出代码0

 2.获取<wi>标签所有class属性

from lxml import etree

html = etree.parse('index.html')
result = html.xpath('//wi/@class')

print(result)

输出——

['student']

3.获取<ul>标签下name为林的<li>标签

from lxml import etree

html = etree.parse('index.html')
result = html.xpath('//ul/li[@name="林"]')

print(result)

输出——

[<Element li at 0x2b6654df880>]

4.获取<pr> 标签下所有的 <ti> 标签

from lxml import etree

html = etree.parse('index.html')
result = html.xpath('//ul/ti')

print(result)

输出——

[<Element ti at 0x24d9c46fb00>, <Element ti at 0x24d9c46fa80>]

5.获取<ul> 标签下的 <ti> 标签里的所有 class:

from lxml import etree

html = etree.parse('index.html')
result = html.xpath('//ul/ti//@class')

print(result)

输出——

['time', 'incident']

6.获取最后一个<ul> <wi><love-food>

from lxml import etree

html = etree.parse('index.html')
result = html.xpath('//ul[last()]/wi//@love-food')

print(result)

输出——

['月饼']

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

from lxml import etree

html = etree.parse('index.html')
result = html.xpath('//ul[last()-1]/wi')

print(result[0].text)

输出——

18-year-old

8.获取class 值为 incident 的标签名

from lxml import etree

html = etree.parse('index.html')
result = html.xpath('//*[@class="incident"]')
#tag方法可以获取标签名
print(result[0].tag)

输出——

ti

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

linalw

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

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

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

打赏作者

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

抵扣说明:

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

余额充值