首页 > 编程语言 >Python 爬虫之 xpath

Python 爬虫之 xpath

时间:2023-03-10 09:45:40浏览次数:47  
标签:xpath XML Python 爬虫 html print et 节点

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

标签:xpath,XML,Python,爬虫,html,print,et,节点
From: https://www.cnblogs.com/SRIGT/p/17202314.html

相关文章

  • 安装python3 for Centos
     以安装3.7.5为例下载安装包wgethttp://npm.taobao.org/mirrors/python/3.7.5/Python-3.7.5.tar.xz 解压xz-dPython-3.7.5.tar.xztar-xfPython-3.7.5.tar......
  • python中的时间处理
    python程序编写中的时间处理涉及三种:1、时间的显示;2、时间的转换;3、时间的运算。时间处理模块:time模块时间的三种表示方式:①时间戳,从1970年1月1日开始,每过1s增加1,如......
  • 实验1 Python开发环境使用和编程初体验
    #实验任务1#1.1.py#用法1print('hey,u')#用法2print('hey','u')x,y,z=1,2,3print(x,y,z)#用法3print('x=%d,y=%d,z=%d'%(x,y,z))print('x={},y={},z={}'.for......
  • Python Collections
    CollectionsPython的集合(collections)模块,为很多用其他方法很难实现的场景提供了解决方案。通俗说法:Python内置的数据类型和方法,collections模块在这些内置类型的基础提供......
  • Python 异常捕获与处理
    异常捕获和处理一、基础知识1、什么是异常当我们写程序难免遇到报错,专业的称呼叫做异常,行业俗语叫做bug,由于异常情况出现会导致代码停止运行,所以在编写过程中要尽可能避......
  • python list 列表的未位添加 append方法
    #定义列表li=["a","b"]#未位添加li.append("c")print(li)#再次添加li.append("d")print(li)......
  • python list 列表的未位吞并 列表1吃掉列表2
    #列表1要吃掉列表2li1=["a","b","c"]li2=[1,2,3]li1.extend(li2)print(li1)print("列表1变多了")print(li2)print("列表2不发生变化")......
  • python读取mdb文件
    1.安装pyodbcpip3installpyodbc-ihttps://pypi.tuna.tsinghua.edu.cn/simple2.安装accessdatabaseenginehttps://www.microsoft.com/zh-cn/download/details.asp......
  • Python三元运算符
    三元运算符三元运算符通常在Python⾥被称为条件表达式,这些表达式基于真(true)/假(not)的条件判断,在Python 2.4以上才有了三元操作#如果条件为真,返回真否则返回假condit......
  • Python常见内置函数
    常见的内置函数sum(list):求取list元素的和目录常见的内置函数sum(list):求取list元素的和一、重要内置函数匿名函数1map()--映射2max()、min()3reduce()4zip5f......