网页源代码xpath解析

网页源代码解析

xpath 解析

  1. //元素标签名

例如: //div,查找网页内的所有div

  1. //元素标签名[@属性名=‘具体内容’]

例如: //div[@class=‘div1’],查找class为div1的div

  1. //元素标签名[第几个]

例如: //div[@class=‘box’][2],查找符合条件的第2个div

  1. //元素1/元素2/元素3…

例如: //ul/li/div/a/img,查找ul下的li下的div下的a下的img标签

  1. //元素1/@属性名

例如://ul/li/div/a/img/@src, 查找ul下的li下的div下的a下的img标签的src属性

  1. //元素/text()

例如://a/text(), 获取a标签之间的文本(一级文本)

  1. //元素//text()

例如://div[@class=‘box’]//text(), 获取class为div下的所有文本

  1. //元素[contains(@属性名,‘相关属性值’)]

例如://div[contains(@class,‘zhangsan’)] 查找class中包含zhangsan的div

  1. //*[@属性=‘值’]

* 可表示任意标签名
属性可以是任意
例如://*[@name=‘lisi’]查找所有name为lisi的元素

  1. 逻辑运算定位。and 或 or

通过and来缩小过滤的范围,只有条件都符合时才能定位到
//div[@name=‘city’ and @size=‘4’ and @multiple=“multiple”]
or就相反了,只要这些筛选中,条件满足一个就能匹配到了
//div[@name=‘city’ or @size=‘4’ or @multiple=“multiple”]

  1. starts-with / ends-with

解析:匹配以 ctrl开始的属性值
input[starts-with(@id,‘ctrl’)]
解析:匹配以 userName 结尾的属性值
input[ends-with(@id,’_userName’)]

  1. last()

选取属于 div 子元素的最后一个 p 元素
//div/p[last()]
选取属于 div 子元素的倒数第二个 p 元素
//div/p[last()-1]

  1. position()

选取最前面的两个属于 div 元素的子元素的 p 元素
/div/p[position() < 3]

表达式描述
/从根节点选取
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
. .选取当前节点的父节点
//div[@lang]选取所有拥有名为 lang 的属性的 div 元素
//div/p[price>35.00]选取 div 元素的所有 p 元素,且其中的 price 元素的值须大于 35.00。
//a[text()=‘下一页’]匹配内容为下一页的a标签
/bookstore/*选取 bookstore 元素的所有子元素。
  1. 节点轴选择
# -*- coding:utf-8 -*-
from lxml import etree


text = """
<div>
<ul>
<li class="item-0" name="name-0"><a href="link1.html"><span>first item</span></a></li>
<li class="item-1" name="name-1"><a href="link1.html">second item</a></li>
<li class="item-inactive" name="name-2"><a href="link3.html">third item</a></li>
<li class="item-1" name="name-3"><a href="link4.html">fourth item</a></li>
<li class="item-0" name="name-4"><a href="link5.html">fifth item</a></li>
</ul>
</div>
"""
html = etree.HTML(text)
result = html.xpath("//li[1]/ancestor::*")
print("1", result)
result = html.xpath("//li[1]/ancestor::div")
print("2", result)
result = html.xpath("//li[1]/attribute::*")
print("3", result)
result = html.xpath("//li[1]/attribute::class")
print("4", result)
result = html.xpath("//li[1]/child::*")
print("5", result)
result = html.xpath("//li[1]/child::a[@href='link1.html']")
print("6", result)
result = html.xpath("//li[1]/descendant::*")
print("7", result)
result = html.xpath("//li[1]/descendant::span")
print("8", result)
result = html.xpath("//li[1]/following::*")
print("9", result)
result = html.xpath("//li[1]/following::*[2]")
print("10", result)
result = html.xpath("//li[1]/following-sibling::*")
print("11", result)
result = html.xpath("//li[1]/following-sibling::*[2]")
print("12", result)
  • ancestor轴,可以获取所有祖先节点,其后需要跟两个冒号,然后是节点选择器,使用* ,表示匹配所有节点;
  • attribute轴,可以获取属性值,使用*,代表获取节点的所有属性;
  • child轴,可以获取子节点,使用*,代表获取所有子节点;
  • descendant轴,获取所有子孙节点;
  • following轴,获取当前节点之后的所有节点,若添加索引选择,只获取对应节点;
  • following-sibling轴,获取当前节点之后的所有同级节点,若添加索引选择,只获取对应节点。

css解析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值