python爬虫--xpath解析语法

本文深入解析XPath语法,介绍其在HTML和XML文档中定位信息的方法。涵盖节点关系、节点选择及使用技巧,如通配符、获取文本信息等。通过实例演示如何选取特定节点或属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是Xpath? 

Xpath 是一门在XML或者html文档中导航查找信息语法,对HTML有很好的支持 xpath 是一个w3c的标准;xpath 包含标准库;(ps:xml实和html文件一样,是一个文本文件,意思是可扩展标记语言,是一类比较简单的数据存储语言。HTML是被设计用来显示数据的,重点是显示数据以及如何显示数据更好上面。HTML是与显示信息相关的, XML则是与描述信息相关的。很多软件中都会包含有一些XML文件,其实这是一种扩展性标识语言文件,是用于标记电子文件使其具有结构性的标记语言,通常无法直接打开。)

2.Xpath语法的详细用法?

  • 1.节点关系 (层次关系)
  • 2.节点选择

   2.1节点选择
     表达式:nodename |/ |// | . | .. | @  
  nodename: 选取此节点的所有子节点
                 / :从根节点选取
            //div: 选取所有div子元素,而不考虑他们的位                                                                                                                                                                                 . : 选取当前节点
                .. : 选取当前节点的父节点
               @ : 选取属性

用法举例: 

Nodename//div:选取所有属于nodename元素的后代的div元素,不管在nodename之后的任意位置;

    /article/div[1]:选取属于article子元素的第一个div元素

/article/div[last()]:选取属于article子元素的最后一个div元素

/article/div[last()-1]:选取属于article子元素的倒数第二个div元素

//@class :选取所有名为class的属性;

//div[@lang]:选取所有拥有lang属性的div元素

//div[@lang=“eng”]:选取所有lang属性为eng的div元素

/div/*:选取属于div元素的所有子节点

//* :选取所有元素

//div[@*]:选取所有带属性的title元素

/div/a|//div/p :选取所有div元素的a和p元素

//span|//ul :选取文档中的span和ul元素

Article/div/p|//span :选取所有属于article元素的div元素的p元素以及文档中的所有的span元素;


     2.2 Xpath语法中的谓语用来查找某个特定的节点或者包含某个指定值的节点,谓语被嵌套在方括号内;

  • 3.使用技巧

    3.1:"*" 通配符,他可以匹配任何元素节点;
    3.2:/text()可以获取标签中的文字信息
    3.3:结果为列表的数据结构,可以通过切片获取字符串数据结构。
    3.4:遇到相同的字符开头的多个标签,相同时爬取时,不需要构造多个Xpath 路径,通过starts-with(@属性名称,属性字符相同的部分)便可获取多个标签内容;

 用法举例: 
    
<li class = "tag-1">需要的内容1</li>
     <li class = "tag-1">需要的内容2</li>
     <li class = "tag-1">需要的内容3</li>
    获取内容:选取所有class属性为tag的div元素

    Contents = selector.xpath('//li[starts-with(@class,"tag")]/text()')  
    for content in Contents:
         print(content)
   # starts-with() 可获取类似标签的信息


     3.5:当遇到标签套标签情况时:
    用法举例:
  
<div class = “red”>需要的内容1
       <h1>需要的内容2</h1>
   </div>
    #相同时爬取内容可以通过 string(.)完成;

    #选取所有class属性为red的div元素;
     from lxml import etree
     html2 = '''
     <div class = "red"> 需要的内容1
         <h1>需要的内容2</h1>
     </div> '''

selector  = etree.HTMl(html2)
content1 = selector.Xpath("//div[@class = "red"]")[0]
content2 = selector.Xpath('string(.)')
print(content2)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值