iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >5.网络爬虫——Xpath解析
  • 646
分享到

5.网络爬虫——Xpath解析

爬虫python开发语言云原生 2023-09-01 17:09:32 646人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

网络爬虫——Xpath解析 Xpath简介Xpath解析节点选择路径表达式谓语未知节点 Xpath实战演示豆果美食实战获取数据源代码 前言: 📝​&#x

网络爬虫——Xpath解析

前言:
📝​📝​此专栏文章是专门针对python零基础爬虫,欢迎免费订阅!
📝​📝第一篇文章获得全站热搜第一Python领域热搜第一
第四篇文章全站热搜第八,欢迎阅读!
🎈🎈欢迎大家一起学习,一起成长!!
💕💕:悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。在这里插入图片描述

在这里插入图片描述

Xpath简介

XPath是一种用于在XML文档中定位节点的语言,它可以用于从XML文档中提取数据,以及在XML文档中进行搜索和过滤操作。它是W3C标准的一部分,被广泛应用于XML文档的处理和分析。

XPath使用路径表达式来描述节点的位置,这些路径表达式类似于文件系统中的路径。路径表达式由一个或多个步骤(step)组成,每个步骤描述了一个节点或一组节点。步骤可以使用关系运算符(如/和//)来连接,以便描述更复杂的节点位置。

XPath还提供了一些内置函数和运算符,可以对XML文档中的数据进行操作和计算。例如,可以使用XPath的数学函数来计算节点的数值,或使用字符串函数来处理节点的文本内容。

在Python中,XPath可以使用lxml库来实现。lxml提供了一个etree模块,该模块包含了XPath的实现,可以方便地对XML文档进行解析和操作,同时支持XPath语法

Xpath解析

节点选择

XPath用于在XML文档中定位和选择节点,以下是XPath的一些常用用法:
在这里插入图片描述

1. 选择所有节点:

使用双斜杠//选择文档中的所有节点,例如://node()

2. 按标签名选择节点:

使用标签名选择节点,例如://book

3. 按属性选择节点:

使用方括号[]和@符号选择具有特定属性值的节点,例如://book[@cateGory="children"]

4. 选择父节点、子节点和兄弟节点:

使用父节点(…)、子节点(/)和兄弟节点(//)选择节点,例如://book/title/..//book/author/following-sibling::title

5. 使用通配符选择节点:

使用星号*选择任何节点,例如://book/*选择所有book节点的子节点

6. 使用逻辑运算符选择节点:

使用and、or、not等逻辑运算符选择节点,例如://book[price<10 and @category="children"]

7. 使用内置函数处理节点:

使用内置函数处理节点的文本和数值,例如://book[substring(title,1,3)="The"]选择标题以"The"开头的书籍

8. 使用轴选择节点:

使用轴选择节点,例如://book/ancestor::library选择book节点的library祖先节点

在Python中,使用lxml库的etree模块可以方便地使用XPath进行节点定位和选择。例如,可以使用etree.parse()函数解析XML文档,并使用xpath()方法执行XPath表达式,以便选择和操作XML文档中的节点。

路径表达式

在这里插入图片描述

XPath路径表达式是一种用于在XML文档中定位节点的语法。它由一系列节点名、轴、谓词和运算符组成,可以构造出一个完整的路径,以定位到目标节点。

XPath路径表达式的基本语法如下:

/          : 从根节点开始,定位到目标节点//         : 从当前节点开始,递归查找所有符合条件的节点.          : 表示当前节点..         : 表示当前节点的父节点*          : 匹配任意节点@          : 表示属性节点[]         : 表示谓词,用于筛选符合条件的节点

例如,以下是一些XPath路径表达式的示例:

/                 : 定位到根节点/bookstore        : 定位到根节点下的bookstore节点/bookstore/book   : 定位到bookstore节点下的所有book节点//book            : 递归查找所有book节点//book[@category='WEB'] : 查找所有category属性值为web的book节点

XPath路径表达式是XPath语言的核心,它可以用于查询XML文档中的数据,并且在XPath语言中还有很多其他的功能,例如函数、运算符等,可以更加灵活地处理XML数据。

谓语

XPath谓语是一种用于筛选XML文档中特定节点的表达式,它可以在XPath路径中使用。谓语通常由方括号包围,并包括一个条件表达式。

例如,以下XPath路径选择所有名为“book”的元素:

/bookstore/book

如果我们想要选择所有具有价格大于10美元的书籍,我们可以使用以下XPath路径和谓语:

/bookstore/book[price > 10]

在这个例子中,谓语是“[price > 10]”,它指定了一个条件,它只选择价格大于10美元的书籍。

在这里插入图片描述

未知节点

当我们需要选择一个未知节点时,意味着我们无法确定节点的位置或名称,但我们知道节点具有某些特定属性或特征。在这种情况下,我们可以使用通配符、轴、谓词等技术来选择未知节点。

通配符(*)可以用来匹配任何节点,轴可以用来选择与当前节点相关的节点,谓词可以用来筛选符合条件的节点。使用这些技术,我们可以选择任何未知节点,使我们的XPath表达式更加灵活和通用。

在这里插入图片描述

Xpath语法较多,我不一一演示,但在后面实战演示中,会依次讲解,帮助大家理解学习。理论讲解完毕,我们进入实战!!! 💨💨

Xpath实战演示

所以今天实战内容是关于美食的,毕竟博主是一个吃货 。🍧 🍨 🍩 🍪 🎂 🍰🧀 🍖 🍗 🥩 🥓 🍔 🍟 🍕 🌭 🥪 🌮 🌯 🍜 🍝 🍠 🍢 🍣

豆果美食实战

让我们欣赏一下主页吧!

在这里插入图片描述

我们今天不获取照片了,毕竟太吸引人了,哈哈哈。

在这里插入图片描述
>和之前一样,我们点击右键,选择检查,查看元素,接着按CTRL+F键
在这里插入图片描述

在XPath中,nodename指的是XML文档中的节点名称。节点名称可以是元素名称、属性名称、注释名称、处理指令名称等。
在这里插入图片描述
在这里插入图片描述

第一个是不是很简单,想找那个就输入那个,我们慢慢来。
/从根节点选取(取子节点)。在这里插入图片描述

url = 'https://www.douguo.com/'res = requests.get(url)print(res.text)html = etree.HTML(res.text)# /从根节点选取(取子节点)。rest = html.xpath('/html/head/title')  # 返回Element对象print(rest)

在这里插入图片描述

url = 'Https://www.douguo.com/'res = requests.get(url)print(res.text)html = etree.HTML(res.text)# /从根节点选取(取子节点)。rest = html.xpath('/html/head/title/text()')  # 返回Element对象print(rest)

我们在xpath代码里面加入text(),/text() 获取Element对象的元素内容(元素文本)

在这里插入图片描述

// 获取任何位置的数据,不从根路径出发

# // 获取任何位置的数据,不从根路径出发title_text = html.xpath('//title/text()')  # 一般会获取多个数据print(title_text)

在这里插入图片描述

/@属性名 获取标签中的属性名的内容

# /@属性名  获取标签中的属性名的内容attr = html.xpath('//meta/@name')print(attr)

在这里插入图片描述

谓语 (相当于python里面的索引,条件) 选取数据中某部分数据

# 谓语 (相当于python里面的索引,条件)# 选取数据中某部分数据index = html.xpath('/html/head/meta[3]')  # meta[3] 获取meta里面的第3个参数print(index)

在这里插入图片描述

last() 获取最后面的数据

# last() 获取最后面的数据index = html.xpath('/html/body/div[1]/div/a[last()]')  # meta[3] 获取meta里面的第3个参数print(index)

在这里插入图片描述

position()<3 获取索引小于3的数据

# position()<3  获取索引小于3的数据index = html.xpath('/html/body/div[1]/div/a[position()<3]')  # meta[3] 获取meta里面的第3个参数print(index)

在这里插入图片描述

//meta[@charset] 根据标签名 和 属性名称进行数据筛选

# //meta[@charset]  根据标签名 和 属性名称进行数据筛选index = html.xpath('//meta[@charset]')  # meta[3] 获取meta里面的第3个参数print(index)

在这里插入图片描述

//meta[@name="meta1"] # 标签为meta 并且 里面的属性为name,属性的值为author

# //meta[@name="meta1"] # 标签为meta 并且 里面的属性为name,属性的值为authorindex = html.xpath('//meta[@name="author"]')print(index)

在这里插入图片描述

未知节点
不管是什么标签名 只要其中有class="meta1"就获取到

# 未知节点index = html.xpath('//*[@class="item"]')# 不管是什么标签名 只要其中有class="meta1"就获取到print(index)

在这里插入图片描述

获取未知的属性
获取meta标签 并且里面有一个属性的值=keyWords

# 获取未知的属性# 获取meta标签 并且里面有一个属性的值=keywordsindex = html.xpath('//meta[@*="keywords"]')print(index)

在这里插入图片描述

获取数据

常用的用法基本上都讲了一遍,现在教大家怎么获取更多数据
在这里插入图片描述

我们来获取这些菜谱的名字和作者的名字
首先,我们获取这个网页的源代码到我们本地,这个就不具体演示了,前面几章已经作了详细的讲解,如果有疑问,可以看我之前的文章。

直接展示:

import timeimport requestsfrom lxml import etreefrom tabulate import tabulateurl = 'https://www.douguo.com/'res = requests.get(url)print(res.text)# html = etree.HTML(res.text)

在这里插入图片描述

是不是很简单,几行代码就得到了这些数据,接下来我们对源代码里面的数据用Xpath进行解析,来获取我们想要的数据。

首先我们需要认识一行代码
html = etree.HTML(res.text)

这行代码的作用是将 HTTP 响应中的 HTML 文本解析为一个 Element 对象,以便后续对其进行操作,例如提取数据、修改内容、查找元素等等。其中,etree 是 Python 的一个第三方库,可以用来解析 XML 和 HTML 文本。HTML 是一种标记语言,用于构建网页和 Web 应用程序的用户界面。
我们在使用的时候,需要导入,代码如下:
from lxml import etree

进入正题,开始使用Xpath来解析数据:

html = etree.HTML(res.text)name = html.xpath(f'//*[@id="content"]/ul[1]/li[1]/div/a/text()')print(name)

在这里插入图片描述

很好,我们通过一行代码获取了第一个美食的名字,一共有八个美食,我们不可能写八行代码来获取名字吧,虽然可以,但太繁琐,不宜使用。我们可以使用循环,他们之间一定有内在的联系,通过解析发现,他们路径基本上相同,不同的li[i]里面的值,我们通过循环来获取名字。
在这里插入图片描述

修改后的代码,三行就够了!!

html = etree.HTML(res.text)for i in range(1, 9):    name = html.xpath(f'//*[@id="content"]/ul[1]/li[{i}]/div/a/text()')# name1 = html.xpath(f'//*[@id="content"]/ul[1]/li[2]/div/a/text()')# name2 = html.xpath(f'//*[@id="content"]/ul[1]/li[3]/div/a/text()')    print(name)# print(name1)# print(name2)

在这里插入图片描述

我们获取了前八个美食的名字,接下来我们获取前八个美食的作者名字,方法和前面一样,先找到一个作者的xpath路径,接着找规律,如何用循环写出来,如下:

res = requests.get(url)# print(res.text)html = etree.HTML(res.text)for i in range(1, 9):    name = html.xpath(f'//*[@id="content"]/ul[1]/li[{i}]/div/a/text()')    author = html.xpath(f'//*[@id="content"]/ul[1]/li[{i}]/div/p/a[1]/text()')    print(name)    print( author)

在这里插入图片描述

我们获取了想要的数据l,是不是很简单,其实我们还可以美化一下。

    result = tabulate([[name, author]], headers=['Name', 'Author'], tablefmt='orgtbl')    print(result)

将名字和作者的数据以表格的形式输出。具体实现方式是使用tabulate库中的tabulate函数,将数据列表和表头传入函数中,设置输出格式为orgtbl,最后将输出结果打印出来。
在这里插入图片描述

源代码

import timeimport requestsfrom lxml import etreefrom tabulate import tabulateurl = 'https://www.douguo.com/'res = requests.get(url)# print(res.text)html = etree.HTML(res.text)for i in range(1, 9):    name = html.xpath(f'//*[@id="content"]/ul[1]/li[{i}]/div/a/text()')    author = html.xpath(f'//*[@id="content"]/ul[1]/li[{i}]/div/p/a[1]/text()')    print(name)    print(author)    result = tabulate([[name, author]], headers=['Name', 'Author'], tablefmt='orgtbl')    print(result)

🍀🍀写在最后:本篇文章总计上万字,感谢你能阅读到这里,为你的学习点一个赞。为了写好这篇文章,我学习了三天的数据解析,写了四个小时的文章,一点一点的写出来,方便大家理解学习,如果觉得对你有帮助,点一个赞吧,你的赞是对我最大的鼓励,谢谢啦。🌸🌸🌸

在这里插入图片描述

来源地址:https://blog.csdn.net/weixin_50804299/article/details/129714988

--结束END--

本文标题: 5.网络爬虫——Xpath解析

本文链接: https://www.lsjlt.com/news/389016.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 5.网络爬虫——Xpath解析
    网络爬虫——Xpath解析 Xpath简介Xpath解析节点选择路径表达式谓语未知节点 Xpath实战演示豆果美食实战获取数据源代码 前言: 📝​&#x...
    99+
    2023-09-01
    爬虫 python 开发语言 云原生
  • python怎么爬虫lxml库解析xpath网页
    这篇文章主要介绍“python怎么爬虫lxml库解析xpath网页”,在日常操作中,相信很多人在python怎么爬虫lxml库解析xpath网页问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python怎么爬...
    99+
    2023-06-30
  • Python爬虫实战之xpath解析
    XPath 是一门在 XML 文档中查找信息的语言,最初是用来搜寻 XML 文档的,但是它同样适用于 HTML 文档的搜索。 所以在Python爬虫中,我们经常使用xpath解析这种高效便捷的方式来提...
    99+
    2023-09-23
    python 爬虫 开发语言
  • python网络爬虫精解之XPath的使用说明
    目录一、XPath的介绍二、XPath使用1、选取所有节点2、获取子节点3、获取父节点4、属性匹配5、文本获取6、属性获取7、属性多值匹配8、多属性匹配9、按序选择10、节点轴选择X...
    99+
    2024-04-02
  • Python3网络爬虫实战-5、Web库
    Web 想必我们都不陌生,我们现在日常访问的网站都是 Web 服务程序搭建而成的,Python 同样不例外也有一些这样的 Web 服务程序,比如 Flask、Django 等,我们可以拿它来开发网站,开发接口等等。 在本书中,我们主要要用到...
    99+
    2023-01-31
    爬虫 实战 网络
  • python爬虫lxml库解析xpath网页过程示例
    目录前言(一)xpath是什么(二)xpath的基本语法 路径查询。(三) lxml库(四)lxml库的使用 导入lxml.etree(五)实例演示前言 在我们抓取网页内容的时候,通...
    99+
    2024-04-02
  • python爬虫指南之xpath实例解析
    Python爬虫指南之XPath实例解析XPath是一种用于在XML文档中进行导航和查找元素的语言。在爬虫中,XPath可以用于解析...
    99+
    2023-08-15
    python
  • 【Python爬虫】数据解析之bs4解析和xpath解析
    🔥一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去🎶 🦋 欢迎关注🖱点赞👍收...
    99+
    2023-09-06
    python 爬虫 开发语言
  • python爬虫中xpath实例分析
    这篇文章主要介绍“python爬虫中xpath实例分析”,在日常操作中,相信很多人在python爬虫中xpath实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python爬虫中xpath实例分析”的疑...
    99+
    2023-06-29
  • python爬虫教程之bs4解析和xpath解析详解
    目录bs4解析原理:如何实例化BeautifulSoup对象:用于数据解析的方法和属性:xpath解析xpath解析原理:实例化一个etree对象:xpath( ‘xpa...
    99+
    2024-04-02
  • Python3网络爬虫实战-28、解析库
    上一节我们实现了一个最基本的爬虫,但提取页面信息时我们使用的是正则表达式,用过之后我们会发现构造一个正则表达式还是比较的繁琐的,而且万一有一点地方写错了就可能会导致匹配失败,所以使用正则来提取页面信息多多少少还是有些不方便的。 对于网页的节...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-29、解析库
    前面我们介绍了正则表达式的相关用法,但是一旦正则写的有问题,可能得到的就不是我们想要的结果了,而且对于一个网页来说,都有一定的特殊的结构和层级关系,而且很多节点都有id或class来对作区分,所以我们借助于它们的结构和属性来提取不也是可以的...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python网络爬虫举例分析
    这篇文章主要讲解了“Python网络爬虫举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python网络爬虫举例分析”吧!先来看一段简单的代码。import requests...
    99+
    2023-06-02
  • Python爬虫必备之XPath解析库的示例分析
    小编给大家分享一下Python爬虫必备之XPath解析库的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、简介XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进...
    99+
    2023-06-15
  • python爬虫之三:解析网络报文xml
    本节主要是讲解在项目中怎么解析获取的xml报文并获取相关字段。 xml解析第三方库学习地址:http://www.runoob.com/python/python-xml.html xml文件如下: <xml versio...
    99+
    2023-01-31
    报文 爬虫 之三
  • Python3网络爬虫实战-11、爬虫框
    ScrapySplash 是一个 Scrapy 中支持 JavaScript 渲染的工具,本节来介绍一下它的安装方式。ScrapySplash 的安装分为两部分,一个是是 Splash 服务的安装,安装方式是通过 Docker,安装之后会...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-15、爬虫基
    在写爬虫之前,还是需要了解一些爬虫的基础知识,如 HTTP 原理、网页的基础知识、爬虫的基本原理、Cookies 基本原理等。 那么本章内容就对一些在做爬虫之前所需要的基础知识做一些简单的总结。 在本节我们会详细了解 HTTP 的基本原理...
    99+
    2023-01-31
    爬虫 实战 网络
  • python爬虫指南之xpath实例解析(附实战)
    目录前言环境的安装属性定位索引定位取文本取属性总结前言 XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻X...
    99+
    2024-04-02
  • Python3网络爬虫实战-10、爬虫框
    我们直接用 Requests、Selenium 等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的。但是写多了会发现其内部许多代码和组件是可以复用的,如果我们把这些组件抽离出来,将各个功能模块化,就慢慢会形成一个框架雏形,久...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫(十一):爬虫黑科
    原文链接: Jack-Cui,http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 1 前言 近期,有些朋友问我一些关...
    99+
    2023-01-31
    爬虫 网络
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作