Python爬虫-xpath

使用时先安装 lxml 包

 

节点、元素、属性、内容

xpath 的思想是通过 路径表达 去寻找节点。节点包括元素属性,和内容

  元素举例:

  html : <html> ...</html>

  div : <div> ...</div>

  a : <a> ...</a>

 

路径表达式

  /  根节点,节点分隔符

    //  任意位置

  .  当前节点

  ..  父级节点

  @  属性

 

通配符

  * 任意元素

  @* 任意属性

  node() 任意子节点(元素,属性,内容)

 

谓语(使用中括号来限定元素,称为谓语)

  //a[n] n为大于零的整数,代表子元素排在第n个位置的<a>元素

  //a[last()] last() 代表子元素排在最后个位置的<a>元素

  //a[last()-] 和上面同理,代表倒数第二个

  //a[position()<3] 位置序号小于3,也就是前两个,这里我们可以看出xpath中的序列是从1开始

  //a[@href] 拥有href的<a>元素

  //a[@href='www.baidu.com'] href属性值为'www.baidu.com'的<a>元素

  //book[@price>2] price值大于2的<book>元素

多个路径

| 连接两个表达式,可以进行 匹配

  //book/title | //book/price

函数

xpath内置很多函数。更多函数查看https://www.w3school.com.cn/xpath/xpath_functions.asp

  contains(string1,string2)

  starts-with(string1,string2)

  ends-with(string1,string2) #不支持

  upper-case(string) #不支持

  text()

  last()

  position()

  node()

  

复制代码
#解析html文件
parser = etree.HTMLParser(encoding='utf-8')
# html_file= etree.parse('test.html',parser=parser)
html_file= etree.parse('test02.html',parser=parser)

# data2 = html_file.xpath('//*')
# for i in data2:
#     if hasattr(i,'text'):
#         print(i.text)

#解析带属性a标签的text文本 & 多个路径 |
data3 = html_file.xpath('//li/a[@href]/text() | //li/a/@href')
for i in data3:
    print(i)
复制代码

 

posted @   小酒馆里的清茶  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示