首页 > 编程语言 >Python 02 Xpath

Python 02 Xpath

时间:2023-05-22 11:01:22浏览次数:38  
标签:02 Xpath 所有 Python 元素 选取 ul li 节点


Xpath

Xpath (XML Path Language)是在 XML 文档中选择节点的语言

一、XPath 路径表达式

1、XPath 节点

在 XPath 中,有七种类型的节点:元素属性文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的,树的根被称为文档节点或者根节点

2、XPath 节点关系

父(Parent)子(Children)同胞(Sibling)先辈(Ancestor)后代(Descendant)

3、选取节点

XPath 使用路径表达式在 html 文档中选取节点。

[A]/B:A 中所有的 B 子节点;A 缺省 B 指 html 节点,即:/ 为根节点。
对 html 的子节点可以通过节点名选取,如:head 选取所有的 html 下的子节点 head。
[A]//B:A 的所有后代节点 B,如: //div 文档中所有 div 节点,body//div: body 所有的的后代节点  div。
.	选取当前节点
..	选取当前节点的父节点	
*	匹配任何元素节点,如:div/* 选取 div 元素的所有子元素,//*	选取文档中的所有元素。
@ 选取属性,如://@lang	选取名为 lang 的所有属性。
@* 匹配任何属性节点,如://title[@*]	选取所有带有属性的 title 元素。

ul/li[1] : ul 子元素的第一个 li 元素。
ul/li[last()]	: ul 子元素的最后一个  li 元素。
ul/li[last()-1]: ul 子元素的倒数第二个 li 元素。
ul/li[position()<3]: ul 元素的前2个 li 元素。
//title[@lang]:所有拥有 lang 属性的 title 元素。
//title[@lang='en']:所有拥有 lang 属性值为 'en' 的 title 元素。
ul/li[price>35.00]:ul 元素的拥有 price>35.00 的 li 元素。
ul/li[price>35.00]//title:ul 元素的拥有 price>35.00 的 li 元素的 title 元素。

node()	匹配任何类型的节点
text() ,如:p/text() 选取节点中的所有文本。
"|" 运算符,如:div | p 选取所有的 div 节点和 p 节点,即返回所有拥有 div 和 p 元素的节点集。

4、XPath 轴

轴可定义相对于当前节点的节点集。

ancestor	选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self	选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute	选取当前节点的所有属性。
child	选取当前节点的所有子元素。
descendant	选取当前节点的所有后代元素(子、孙等)。
descendant-or-self	选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following	选取文档中当前节点的结束标签之后的所有节点。
following-sibling	选取当前节点之后的所有兄弟节点
namespace	选取当前节点的所有命名空间节点。
parent	选取当前节点的父节点。
preceding	选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling	选取当前节点之前的所有同级节点。
self	选取当前节点。

二、实例

from requests_html import HTML

doc = '''<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">  
    <title>Test Document</title>
</head>
<body>
    <div id='content'>
        <ul class='list'>
            <li class='one'>One</li>
            <li class='two'>Two</li>
            <li class='three'>Three</li>
            <li class='four four1 four2 four3'>Four</li>
            <div id='inner'>呵呵呵
                <a href='http://www.baidu.com'>百度一下</a>
                <p>第1段</p>
                <p>第2段</p>
                <p>第3段</p>
                <p>第4段<span id="first">python 程序设计</span> </p>
                <p>第5段</p>
                <p>第6段</p>
            </div>
            <div id='inne inner'>嘿嘿嘿</div>
        </ul>
        <ul class='text'>This is Text</ul>
    </div>
</body>
</html>'''

html = HTML(html=doc)
contents = html.xpath("//*[@id='inner']/p[4]/text()")
# 结果是一个列表
content = html.xpath("//*[@id='inner']/p[4]",first=True)
for i in contents:
    print(i)
    print('-'*20)

print(content.text)


标签:02,Xpath,所有,Python,元素,选取,ul,li,节点
From: https://blog.51cto.com/u_1439909/6321649

相关文章

  • Python 1-09 字符串
    Python1-09字符串一、Python字符串在Python3中,字符串是由Unicode码点组成的不可变序列。x="Python"y=x+"Cat"xisy#False字符串是用单引号"或双引号""括起来的一串字符,使用三引号创建多行字符串。在Python中单字符也是用字符串表示。>>>var1='HelloWor......
  • python随机爬取五个电影演员一生生涯中出演的电影名称
    为了随机爬取电影演员的电影,需要使用Python中的网络爬虫技术和相关的第三方库,如requests和BeautifulSoup。以下是一个简单的示例程序:importrandomimportrequestsfrombs4importBeautifulSoup#输入要爬取的演员的姓名actor_name=input('请输入要爬取的演员的姓名:')#......
  • 6月西安 | 2023年易智瑞遥感应用培训班报名开启
    传递遥感技术助力遥感应用2023年易智瑞遥感应用培训班—6月西安站 主办单位易智瑞信息技术有限公司培训简介遥感应用培训班自2009年启动以来,已经举办了14年。已先后在20多个城市举办了120多场培训,共有7000多名学员参加。每年培训班内容都会根据学......
  • 5-19|记录Python调用salt代码
    #放大一importsalt.clientlocal=salt.client.LocalClient()res=local.cmd(f'{minion_id}','test.ping',timeout=10)#方法二importsalt.configimportsalt.loader__opts__=salt.config.minion_config('/etc/salt/minion')__grains__......
  • Python 什么是数组?
    在Python中,数组通常是指用于表示具有相同数据类型的多个元素的数据结构。在Python中,数组可以表示为列表或NumPy数组。列表:Python中最常用的数组表示法是“列表”。一个列表是由一系列有序元素的集合组成,每个元素可以是字符串、数字、布尔值和其他任何类型的对象。例如: ......
  • 2023-Liunx命令 第17章 软件包管理
    17.1rpm指令RPM软件包管理器【语法】rpm[选项][参数]【功能介绍】rpm指令是RPM软件包的管理工具。RPM(全称为:RedHatPackageManager)最早由Redhat公司开发,作为RedhatLinux中软件包的管理工具。目前,有很多主流的发行版都是用RPM来管理Linux的软件包 【选项......
  • AtCoder Beginner Contest 302 Ex Ball Collector
    洛谷传送门AtCoder传送门考虑如果只询问一次怎么做。连边\((a_i,b_i)\),对于每个连通块分别考虑。这是ARC111B,如果一个连通块是树,肯定有一个点不能被选;否则有环,一定能构造一种方案,使得每个点都被选。那么现在对于每个点都要求,考虑dfs时合并当前的\((a_u,b_u)\),并且使用......
  • NOISC 2023 VP 游记
    省里并没有安排,只能VP。T1感觉比种花还水......码量贼小......T2感觉相当套路,\(b\ge3\)的暴力,剩下的随便判判。火速码完前两题,T3一开始没有任何思路,想着想着突然发现了keyobservation,迅速写完。这前3题和NOIP完全不是一个难度啊(此时已经1h+了,T4这熟悉的风格......
  • NOI 2023 联合省选 游记
    合集链接搞笑选手来了,也许是金勾最低分。Day1CSUST的电脑怎么这么垃圾...进场先看题,T1小清新,T2计数,T3...黄金矿工?T1感觉比去年D1T1好,不过反正人均切。然后就是T2。先想树,发现枚举连通块的大小单次可以做到\(O(n)\),而有用的大小只有\(O(\sqrt{n})\)。至于一般图.........
  • Python直连MySQL数据库
        Python标准数据库接口为PythonDB-API,PythonDB-API为开发人员提供了数据库应用编程接口。Python数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:GadFlymSQLMySQLPostgreSQLMicrosoftSQLServer2000InformixInterbaseOracleSybase你可以访问Pytho......