【Python-爬虫】- xpath

目录

1.导入

2.etree解析数据的两种情况

1.解析本地文件

2.解析服务器响应文件

3.常用符号及其含义

4.xpath基本语法

1.查找标签

2.获取标签内的文本值 

3.获取标签的属性 

4.  多个节点的选取用 “|”  (选取若干路径)

5.案例练习

6.插件推荐

1.Chrome插件 XPath Helper

2.Chrome浏览器自带的检测xpath语法的搜索框


1.导入

没有下载lxml库的可以先 pip install lxml 下载一下

                     

如果出现错误,先检查pip的版本是否需要更新

再不行则尝试换源

from lxml import etree

2.etree解析数据的两种情况

1.解析本地文件

tree= etree.parse('XX.html')

              

当把获取的网页源码保存到本地,以.html为后缀,这个时候就需要使用parse来解析本地的html文件

                       

把爬取下来的网页源码保存到本地的好处是:从源码中获取想要的数据时,频繁的修改解析数据的代码而不用频繁的向网站发出请求,避免出现ip被封等情况。

2.解析服务器响应文件

这个就是获取到网页的源码,直接丢给etree.HTML()解析,不用将源码保存到本地

tree = etree.HTML(获取的网页源码)

3.常用符号及其含义

符号描述
/从根节点选取
//不考虑层级关系,查找所有子、孙节点,
@选取属性
.当前节点
..当前节点的父节点
*任意节点元素

4.xpath基本语法

1.查找标签

1.------查找标签------
//div[@id="d"]                查找id属性等于d的div标签

//div[@class="price"]         查找class属性为price的div标签

//ul[@class="list"]/li/a      查找class属性为list的ul标签,ul下的li标签内的a标签


2.获取标签内的文本值 

2.------若要获取标签内的文本值,则需要输入text()------

//div[@class="nav"]/span/text()    获取span标签的内容
//div[@class="price"]/text()       获取div标签的内容

3.获取标签的属性 

3.------查询属性------
找到对应的标签后,后边跟 @要查询的属性
 
//div/a/@href                         获取a标签的href属性
//ul[@class="list"]/div/@class        获取div标签的class属性

4.  多个节点的选取用 “|”  (选取若干路径)

在选取多个节点时用 | 隔开

选取id属性为nav的div标签和class属性为left的div标签

//div[@id="nav"] | //div[@class="left"]

感觉经常使用的就是前三条

5.案例练习

<div id="123">
    <ul class="list">
        <li class="item-0"> <a href="https://www.baidu.com">百度</a>   </li>
        <li class="item-1"> <a href="https://www.jd.com/">京东</a>     </li>
        <li class="item-2"> <a href="link3.html">第三</a>              </li>
        <li class="item-3"> <a href="link4.html">第四</a>              </li>
        <li class="item-4"> <a href="link5.html">第五</a>              </li>
    </ul>
</div>

<div class="nav">我是一个导航条</div>

<div class="text">
    <span>快来获取我的内容啊!</span>
    <h1>你不要过来啊!</h1>
</div>
1.获取class属性为list的ul列表中的第一个li标签
//ul[@class="list"]/li[1]

2.获取class属性为text的div标签内的span标签的内容
//div[@class="text"]/span/text()        #快来获取我的内容啊!

3.获取class属性为text的div标签内的所有内容
//div[@class="text"]//text()            #快来获取我的内容啊! 你不要过来啊!

//可以忽略层级,查找某标签的子、孙节点

4..获取class属性为nav的div标签的内容
//div[@class="nav"]/text()                #我是一个导航条

3..获取ul列表中的第一个li标签内的a标签的href属性
//ul/li[1]/a/@href                     #https://www.baidu.com 
     
 在上方的html代码中只有一个ul标签,所以在这不指定ul的class属性也可以找到这个ul标签

4.获取class属性为nav和class属性为text的两个div标签
//div[@class="nav"] | //div[@class="text"]

6.插件推荐

1.Chrome插件 XPath Helper

安装这个插件后,在网页的界面按下ctrl+shift+x 唤醒插件,左侧输入xpath语法,右侧根据你输入的语法显示结果

 

2.Chrome浏览器自带的检测xpath语法的搜索框

在Chrome浏览器中,右键点击检查或按下F12,在显示html代码的页面中按下ctrl+F进行搜索,在搜索框内也可以输入xpath语法进行定位

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值