0x01 XML 基础

xpath 是在 XML 文档中搜索内容的一门语言

HTML 是 XML 的一个子集

XML 代码举例:

<book>
<isbn>978xxxxxxxx</isbn>
<name>XML从入门到精通</name>
</book>

其中:

  1. <book><isbn>等称为节点

    1. <book><isbn>的父节点
    2. <isbn><book>的子节点之一
    3. <isbn><name>互为兄弟节点
  2. 通过节点之间的关系,从根节点查找任意节点,如\book\isbn

    xpath 查找原理

0x02 解析 XML

安装 lxml 模块:pip install lxml(4.5.0)

lxml 用法步骤:

  1. 将需要解析的 HTML 内容构造出 etree 对象

  2. 使用 etree 对象的xpath()方法配合 xpath 表达式来完成对数据的提取

    from lxml import etree
    
    html = """
    <book>
    <isbn>978xxxxxxxx</isbn>
    <name>XML从入门到精通</name>
    <ctx id="111">内容一</ctx>
    <ctx id="222">内容二</ctx>
    <div>
    <ctx id="333">内容三</ctx>
    </div>
    </book>
    """
    et = etree.XML(html) # 根据节点进行搜索
    res1 = et.xpath("/book")
    res2 = et.xpath("/book/isbn")
    res3 = et.xpath("/book//ctx")
    res4 = et.xpath("/book/*/ctx")
    res5 = et.xpath("/book//ctx/text()") # 获取该节点的文本
    # 输出结果
    print(res1)
    print(res2)
    print(res3)
    print(res4)
    print(res5)

0x03 解析 HTML

测试用 HTML:

<html>
<head>
<meta charset="utf-8" >
<title>页面标题</title>
</head>
<body>
<h1>标题一</h1>
<h2>标题二</h2>
<h3>标题一</h3>
<h4>标题一</h4>
<a href="http://www.qq.com">腾讯网</a>
<div id="content" class="default">
<p>段落</p>
<a href="http://www.baidu.com">百度</a>
<a href="http://www.cnblogs.com/SRIGT">我的博客</a>
<a href="test">测试</a>
<img src="./logo.ico" />
</div>
</body>
</html>

python 代码:

当标签使用不规范时,使用 xpath 爬取会报错

如:

<!-- 不规范 -->
<meta charset="utf-8">
<!-- 规范 -->
<meta charset="utf-8" />
from lxml import etree

et = etree.parse("test.html")
res1 = et.xpath('/html')
res2 = et.xpath("/html/body//a/text()") # 所有<a>标签的文本
res3 = et.xpath("/html/body/div/a[1]/text()") # 第1个<a>标签的文本
res4 = et.xpath("/html/body/div/a[@href='test']/text()") # 由属性值索引的文本
print(res4)
print() links = et.xpath("/html/body/div/a")
for link in links:
res5_1 = link.xpath("./text()")
print(res5_1)
res5_2 = link.xpath("./@href")
print(res5_2) res6 = et.xpath("/html/body/div/a/@href")
print(res6)

End

Python 爬虫之 xpath的更多相关文章

  1. python爬虫:XPath语法和使用示例

    python爬虫:XPath语法和使用示例 XPath(XML Path Language)是一门在XML文档中查找信息的语言,可以用来在XML文档中对元素和属性进行遍历. 选取节点 XPath使用路 ...

  2. Python爬虫之xpath语法及案例使用

    Python爬虫之xpath语法及案例使用 ---- 钢铁侠的知识库 2022.08.15 我们在写Python爬虫时,经常需要对网页提取信息,如果用传统正则表达去写会增加很多工作量,此时需要一种对数 ...

  3. 非常全的一份Python爬虫的Xpath博文

    非常全的一份Python爬虫的Xpath博文 Xpath 是 python 爬虫过程中非常重要的一个用来定位的一种语法. 一.开始使用 首先我们需要得到一个 HTML 源代码,用来模拟爬取网页中的源代 ...

  4. 【python爬虫】Xpath

    一.xml是什么 1.定义:可扩展标记性语言 2.特点:xml的是具有自描述结构的半结构化数据. 3.作用:xml主要设计宗旨是用来传输数据的.他还可以作为配置文件. 二.xml和html的区别 1. ...

  5. python爬虫中XPath和lxml解析库

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  6. python爬虫--用xpath爬豆瓣电影

    步骤 将目标网站下的页面抓取下来 将抓取下来的数据根据一定规则进行提取   具体流程 将目标网站下的页面抓取下来 1. 倒库 import requests 2.头信息(有时候可不写) headers ...

  7. Python爬虫:Xpath语法笔记

    一.选取节点 常用的路劲表达式: 表达式 描述 实例   nodename 选取nodename节点的所有子节点 xpath(‘//div’) 选取了div节点的所有子节点 / 从根节点选取 xpat ...

  8. python爬虫之xpath的基本使用

    一.简介 Xpath是一门在XML文档中查找信息的语言.Xpath可用来在XML文档中对元素和属性进行遍历.Xpath是W3C XSLT标准的主要元素,并且XQuery和XPointer都构建于XPa ...

  9. Python 爬虫知识点 - XPath

    http://cuiqingcai.com/2621.html 一.基础介绍 <bookstore> <book> <title>Harry Potter</ ...

  10. python爬虫-使用xpath方法

    #coding=utf-8 import re from lxml import etree import requests response = requests.get("http:// ...

随机推荐

  1. require和import的区别以及相互使用的方式

    Node.js 里可分为 CommonJS 模块和 ECMAScript 模块(ESM)两种不同的模块系统. CommonJS 模块是 Node.js 最初支持的模块系统,它使用 require() ...

  2. hutool,真香!

    前言 今天给大家介绍一个能够帮助大家提升开发效率的开源工具包:hutool. Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式 ...

  3. float、double的精度、范围,在内存中的存储方式

    float.double的精度,在内存中的存储方式 一.浮点型变量在内存中的存储方式 Java的浮点数遵循IEEE 754标准,采用二进制数据的科学计数法来表示浮点数,float遵从的是IEEE R3 ...

  4. python学习笔记(4):面向对象

    面向对象 定义 class Student(被继承类): def __init__(self, xx, xxx): #构造函数 类方法的第一个参数一定是self.除此之外和普通函数并没有区别.同样可以 ...

  5. 文件的特殊权限:SUID,SGID,SBIT

    文件的特殊权限:SUID,SGID,SBIT Set UID SUID权限只用于二进制文件 运行者必须有X权限 运行者在程序运行过程(run-time)中具有二进制文件拥有者(owner)的权限 例子 ...

  6. linux使用hostapd+dnsmasq管理多张网卡,搭建dns服务器,并发射wifi热点(支持360wifi等等)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文发布于 2015-03-03 18:37:39 ...

  7. 深入解析C#中的第三方库NPOI:Excel和Word文件处理的利器

    一.引言 在.NET开发中,操作Office文档(特别是Excel和Word)是一项常见的需求.然而,在服务器端或无Microsoft Office环境的场景下,直接使用Office Interop可 ...

  8. python高级技术(死锁、递归锁、信号量、Event事件、进程池、线程池、协程)

    一 死锁和递归锁(了解) 进程也有死锁与递归锁,使用方法类似 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 此时称 ...

  9. 记录--谁还没个靠bug才能正常运行的程序

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近遇到一个问题,计算滚动距离,滚动比例达到某界定值时,显示mask,很常见吧^ _ ^ 这里讲的不是这个需求的实现,是其中遇到了一个比较 ...

  10. RageFrame学习笔记:环境配置+项目拉取并实例化到本地

    最近在研究一个基于YII2的框架,原本我以为很简单,但没想到在第一步环境配置和实例化上就卡了我4个小时,这里分享出我走过的弯路和解决问题的整个流程. 关注我文章的朋友应该了解过,我之前学习easyad ...