Python爬虫必备之Xpath简介及实例讲解

Python爬虫必备之Xpath简介及实例讲解

什么是Xpath

Xpath(XML Path Language)是一种在XML文档中定位元素的语言。它可以通过标签、属性等特征,准确定位到需要抽取数据的目标元素。在Python爬虫中,Xpath是一个非常重要的工具,可以帮助我们快速准确地抽取需要的数据。

Xpath的基本语法

Xpath的语法非常简单,以下是常用的一些语法:

  • nodename: 选取此节点的所有子节点。
  • /: 从根节点开始选取(绝对路径)。
  • //: 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
  • .: 选取当前节点。
  • ..: 选取当前节点的父节点。
  • @: 选取属性。

Xpath的实例讲解

示例1

以下是一个HTML文档的例子:

<html>
  <head>
    <title>示例页面</title>
  </head>
  <body>
    <div class="container">
      <h1>这是一个标题</h1>
      <p class="content">这是段落1</p>
      <p class="content">这是段落2</p>
      <a href="https://www.baidu.com">这是一个链接</a>
    </div>
  </body>
</html>

我们要抽取出其中的标题和链接。使用Xpath的语法表达式,可以得到以下结果:

from lxml import etree

html = """
<html>
  <head>
    <title>示例页面</title>
  </head>
  <body>
    <div class="container">
      <h1>这是一个标题</h1>
      <p class="content">这是段落1</p>
      <p class="content">这是段落2</p>
      <a href="https://www.baidu.com">这是一个链接</a>
    </div>
  </body>
</html>
"""

selector = etree.HTML(html)
title = selector.xpath('//title/text()')[0]
link = selector.xpath('//a/@href')[0]

print(title)
print(link)

输出结果如下:

示例页面
https://www.baidu.com

示例2

以下是一个网页的例子:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>电影排行榜</title>
</head>
<body>
    <ul class="list">
        <li class="item">
            <div class="name">霸王别姬</div>
            <div class="score">9.7</div>
            <div class="author">陈凯歌</div>
        </li>
        <li class="item">
            <div class="name">肖申克的救赎</div>
            <div class="score">9.5</div>
            <div class="author">弗兰克·德拉邦特</div>
        </li>
        <li class="item">
            <div class="name">这个杀手不太冷</div>
            <div class="score">9.4</div>
            <div class="author">吕克·贝松</div>
        </li>
    </ul>
</body>
</html>

我们要抽取出其中的电影名称、评分和导演。使用Xpath的语法表达式,可以得到以下结果:

from lxml import etree

html = """
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>电影排行榜</title>
</head>
<body>
    <ul class="list">
        <li class="item">
            <div class="name">霸王别姬</div>
            <div class="score">9.7</div>
            <div class="author">陈凯歌</div>
        </li>
        <li class="item">
            <div class="name">肖申克的救赎</div>
            <div class="score">9.5</div>
            <div class="author">弗兰克·德拉邦特</div>
        </li>
        <li class="item">
            <div class="name">这个杀手不太冷</div>
            <div class="score">9.4</div>
            <div class="author">吕克·贝松</div>
        </li>
    </ul>
</body>
</html>
"""

selector = etree.HTML(html)
movie_list = selector.xpath('//ul[@class="list"]/li')
for movie in movie_list:
    name = movie.xpath('.//div[@class="name"]/text()')[0]
    score = movie.xpath('.//div[@class="score"]/text()')[0]
    author = movie.xpath('.//div[@class="author"]/text()')[0]
    print('电影名:', name, '评分:', score, '导演:', author)

输出结果如下:

电影名: 霸王别姬 评分: 9.7 导演: 陈凯歌
电影名: 肖申克的救赎 评分: 9.5 导演: 弗兰克·德拉邦特
电影名: 这个杀手不太冷 评分: 9.4 导演: 吕克·贝松

以上就是Xpath的简介及实例讲解,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫必备之Xpath简介及实例讲解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Django的HttpRequest和HttpResponse对象详解

    本攻略将提供一个Django的HttpRequest和HttpResponse对象详解,包括HttpRequest对象和HttpResponse对象的属性和方法。攻略将包含两个示例,分别演示如何使用HttpRequest对象和HttpResponse对象。 HttpRequest对象 HttpRequest对象是Django中的一个类,用于表示HTTP请求。…

    python 2023年5月15日
    00
  • pymssql数据库操作MSSQL2005实例分析

    pymssql数据库操作MSSQL2005实例分析 简介 pymssql是Python对MSSQL数据库的一种驱动程序,可以通过它连接MSSQL数据库并执行SQL语句。 安装 安装pymssql python pip install pymssql 安装MSSQL驱动 对于Windows系统用户,需要下载Microsoft ODBC Driver for S…

    python 2023年6月7日
    00
  • 如何使用 python xml.dom.minidom 获取ElementsByClassName?

    【问题标题】:How to getElementsByClassName by using python xml.dom.minidom?如何使用 python xml.dom.minidom 获取ElementsByClassName? 【发布时间】:2023-04-03 17:59:01 【问题描述】: 我想获取所有具有特定类的元素的主体。 Python…

    Python开发 2023年4月8日
    00
  • Python之基础函数案例详解

    Python之基础函数案例详解 什么是函数 在Python编程中,函数是一段代码,它可以接收用户给定的输入(又叫做参数),并对这些输入执行操作,最终得出一个输出。函数的主要作用是避免代码的重复、提高代码的可读性和可维护性。每个函数都有一个名称,就像变量的名称一样,它可以在程序的其他地方使用。 怎么定义一个函数 Python中,函数的定义格式如下: def f…

    python 2023年5月30日
    00
  • 多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法

    在Python 2和Python 3共存的环境中,升级pip可能会导致pip2pip3和Python版本不匹配的问题。为了解决这个问题,可以采取以下步骤: 1. 确定Python 2和Python 3的pip路径 首先,在终端中输入以下命令,确定Python 2和Python 3的pip路径: pip2 -V pip3 -V 这会输出pip2和pip3的版本…

    python 2023年5月14日
    00
  • 基于Python实现西西成语接龙小助手

    西西成语接龙小助手是一个基于Python实现的小工具,可以帮助用户进行成语接龙游戏。本攻略将介绍西西成语接龙小助手的实现过程,包括数据获取、数据处理、游戏逻辑和示例。 步骤1:获取成语数据 在Python中,我们可以使用requests库获取成语数据。以下是获取成语数据的示例代码: import requests url = ‘https://www.xix…

    python 2023年5月15日
    00
  • python通过pillow识别动态验证码的示例代码

    当我们在使用Python模拟登录一些网站时,往往会遇到验证码的问题。如果验证码是静态的,比如数字和字母组成的验证码,我们可以直接使用tesseract或者第三方库来识别,但是如果验证码是动态的,比如不断变化的验证码,这就需要使用一些其他的方法来识别。这个时候,我们可以使用Python中的第三方库Pillow来对动态验证码进行识别。 Pillow原本是Pyth…

    python 2023年5月18日
    00
  • Python中的通函数numpy.ufunc详解

    Python中的通函数numpy.ufunc详解 什么是ufunc? ufunc是universal function的缩写,翻译过来是“通用函数”。它是一个能够对ndarray执行元素级别操作并产生新ndarray的函数。简而言之,它就是numpy提供的一组对于ndarray中元素进行逐元素操作的函数。 ufunc的功能和分类 ufunc的作用是对ndar…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部