xpath语法

XPath使用路径表达式来选取XML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

下面列出了最有用的表达式:

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

选取未知节点

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

案例

import parsel # str --> Selector对象具有xpath方法
提取到的数据返回一个列表
html_str = """
<div>
<ul>
<li class="item-i">
<a href="link1.html">第一个</a>
</li> <1iclass="item-2个>J学言
<a href="link2. html">第二个</a>
</li> <li class="item-3">
<a href="link3.html">第三个</a>
</li> <li class="item-4">
<a href="link4.html">第四个</a>
</li> <li class="item-5">
<a href="link5.html">第五个</a>
</li>
</ul>
</div>
# 1、转换数据类型
# data = parsel.Selector(html_str).extract()
# parsel能够把缺失的html标签补充完成
data = parsel.Selector (html_str) # parsel能够把缺失的html标签补充完成
# 2、解析数据--list类型
# print(data)
# 2、1从根节点开始,获取所有<a>标签
result = data.xpath(' /html/body/ div/ul/li/a').extract()
# 2、2跨节点获取所有<a>标签
result = data. xpath('/ /a').extract()
# 2、3选取当前节点――使用场景:需要对选取的标签的下一级标签进行多次提取
result = data.xpath('//ul')
result2 = result.xpath(' ./li').extract() #提取当前节点下的<li>标签
result3 = result.xpath(' ./li/a').extract() #提取当前节点下的<a>标签
# 2、4选取当前节点的父节点,获取父节点的class属性值
result = data.xpath(' //a')
result4 = result.xpath('../@class').extract()
# 2、5获取第三个<li>标签的节点(两种方法)
result = data. xpath('//li[3]').extract()
result = data. xpath(' / /1i')[2].extract()
# 2、6 通过定位属性的方法获取第四个<a>标签
result = data. xpath(' / / a [@href="link4.html"]’).extract()
#2、7用属性定位标签,获取第四个<a>标签包裹的文本内容
result = data.xpath('//a[@href="link4.html"]/text()' ). extract()
#2、8获取第五个<a>标签的href属性值
result = data. xpath(' / /1i[5]/a/@href').extract(#了解模糊查询
result = data.xpath('//li[contains(@class,"it")]’).extract ()
#同时获取<li>标签的属性以及<a>标签的文本
# result = data.xpath('//li/@class|//a/text()').extract() print (result)

如何选取多个标签?

通过在路径表达式中使用“”运算符,您可以选取若干个路径。(逻辑运算符)

小结

  1. xpath的概述XPath (XML Path Language),解析查找提取信息的语言
  2. xpath的节点关系:根节点,子节点,同级节点
  3. xpath的重点语法获取任意节点://
  4. xpath的重点语法根据属性获取节点:标签[@属性=’值’]
  5. xpath中获取节点的文本:text )
  6. xpath的获取节点属性值:@属性名

Python爬虫基础讲解(七):xpath的语法的更多相关文章

  1. python爬虫-基础入门-python爬虫突破封锁

    python爬虫-基础入门-python爬虫突破封锁 >> 相关概念 >> request概念:是从客户端向服务器发出请求,包括用户提交的信息及客户端的一些信息.客户端可通过H ...

  2. python爬虫-基础入门-爬取整个网站《2》

    python爬虫-基础入门-爬取整个网站<2> 描述: 开场白已在<python爬虫-基础入门-爬取整个网站<1>>中描述过了,这里不在描述,只附上 python3 ...

  3. Python爬虫基础

    前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...

  4. python爬虫-基础入门-爬取整个网站《3》

    python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python ...

  5. python爬虫-基础入门-爬取整个网站《1》

    python爬虫-基础入门-爬取整个网站<1> 描述: 使用环境:python2.7.15 ,开发工具:pycharm,现爬取一个网站页面(http://www.baidu.com)所有数 ...

  6. Python爬虫教程-22-lxml-etree和xpath配合使用

    Python爬虫教程-22-lxml-etree和xpath配合使用 lxml:python 的HTML/XML的解析器 官网文档:https://lxml.de/ 使用前,需要安装安 lxml 包 ...

  7. Python爬虫之lxml-etree和xpath的结合使用

    本篇文章给大家介绍的是Python爬虫之lxml-etree和xpath的结合使用(附案例),内容很详细,希望可以帮助到大家. lxml:python的HTML / XML的解析器 官网文档:http ...

  8. Python爬虫基础——XPath语法的学习与lxml模块的使用

    XPath与正则都是用于数据的提取,二者的区别是: 正则:功能相对强大,写起来相对复杂: XPath:语法简单,可以满足绝大部分的需求: 所以,如果你可以根据自己的需要进行选择. 一.首先,我们需要为 ...

  9. 12.Python爬虫利器三之Xpath语法与lxml库的用法

    LXML解析库使用的是Xpath语法: XPath 是一门语言 XPath可以在XML文档中查找信息 XPath支持HTML XPath通过元素和属性进行导航 XPath可以用来提取信息 XPath比 ...

随机推荐

  1. 实验一 Python程序设计入门

    学号20184307 2019-2020-2 <Python程序设计>实验1报告 课程:<Python程序设计> 班级: 1843 姓名: 章森洋 学号:20184307 实验 ...

  2. 使用Amazon Pinpoint对用户行为追踪

    1.前言 最近在做一个项目,我们的后台大数据团队需要了解用户在使用app的时候,都进行了哪些操作,在哪个页面都干了些什么,以及app日活和月活等等,各种数据.总之就是监控用户行为,说好听一点就是发送反 ...

  3. 学习笔记-vue+quill简单的后台demo

    功能比较单一 https://github.com/opceclee/vue-quill

  4. redis的线程模型

    一.单进程模型来处理客户端的请求 Redis 基于 Reactor 模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler): 文件事件处理器是单线程的 ...

  5. OGG-集成模式抽取与数据库参数streams_pool_size关系

    一.学习目标 Oracle数据库,使用OGG集成模式抽取进程启动时,如果没有配置合理的streams_pool_size参数可能会过一段时间就报错abend! 那么我们如何配置这个参数的大小?如何计算 ...

  6. 一文搞懂MySQL体系架构!!

    写在前面 很多小伙伴工作很长时间了,对于MySQL的掌握程度却仅仅停留在表面的CRUD,对于MySQL深层次的原理和技术知识了解的少之又少,随着工作年限的不断增长,职场竞争力却是不断降低的.很多时候, ...

  7. 开篇:ISP基本模块介绍

    一般来说,ISP pipeline没有非常严格的流程,各家厂商具体实现方案或多或少都有些差异,但大致流程如下图所示.其中,又可以根据处理的数据将其分成BPS(Bayer process segment ...

  8. css详解background八大属性及其含义

    background(背景) 以前笔者在css盒模型以及如何计算盒子的宽度一文中提到过盒模型可以看成由 元素外边距(margin).元素边框(border).元素内边距(padding)和元素内容(c ...

  9. 【DB宝48】JumpServer:多云环境下更好用的堡垒机

    目录 一.JumpServer简介 1.1.页面展示 1.2.特色优势 1.3.功能列表 1.4.架构图 1.5.端口说明 1.6.产品组件 二.安装JumpServer 2.1.一键自动部署 2.2 ...

  10. 王炸!!IDEA 2021.1 推出语音、视频功能,边写代码边聊天,我真的服了…

    IDEA 2020.3 刚没用多久,2021.1 又陆续给我推送更新了: 启动就提醒更新,麻烦,那不如更新下,体验下新版本. 如上图所示,2021.1 更新了 9 个新特性,下面栈长会一一体验给大家介 ...