Python爬虫网页解析神器Xpath详细讲解

news2025/2/27 8:15:05

1、XPath介绍

XPath 是一门在 XML 文档中查找信息的语言。最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的搜索。

2、安装lxml

lxml是Python的第三方解析库,支持HTML和XML解析,而且效率极高,弥补了Python自带的xml标准库在XML解析方面的不足。

第三方库的安装方式:pip install lxml

3、XPath解析原理

  1. 实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中。
  2. 调用etree对象中的xpath方法结合着xpath的表达式实现标签的定位与内容的捕获。

4、实例化etree对象

  1. 将本地的html文档中的源码数据加载到etree对象中:etree.parse(filePath)
  2. 将互联网上获取的源码数据加载到对象中:etree.HTML(response.text)
  3. xpath(‘xpath表达式’)

5、XPath路径表达式

表达式说明
/从根节点选取
//表示是多个层级,从任意位置开始定位
.选取当前节点
选取当前节点的父节点
@选取属性
//div[@class=‘title’] tag[@attrName=“attrValue”]属性定位
//div[@class=“zhang”]/p[3]索引定位,索引是从1开始
/text()获取的是标签中直系的文本内容
//text()标签中非直系的文本内容(所有的文本内容)
/@attrName ==>img/src取属性

6、结合实战讲解

在此以CSDN网站为例进行讲解
在这里插入图片描述
:在这里我要获取官网首页的头条博客的标题,打开控制台(点击控制台的小箭头或者同时按住Ctrl+Shift+C),指向该标题,根据div标签的class值进行定位(这是我们平时使用xpath语法比较多的地方。

from lxml import etree
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
}
url = "https://www.csdn.net/"
response = requests.get(url=url, headers=headers)
# 使用etree解析
data = etree.HTML(response.text)
# //div表示任意路径下的div标签
names = data.xpath("//div[@class='headlines']/div[@class='headlines-right']//div[@class='headswiper-item']/a/text()")
url = data.xpath("//div[@class='headlines']/div[@class='headlines-right']//div[@class='headswiper-item']/a/@href")

blog_list = list(zip(names, url))
for blog in blog_list:
    print(blog)


实现效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis-Plus id生成策略控制

目录 id生成策略控制 不同的表应用不同的id生成策略 名称 TableId AUTO策略 除了AUTO这个策略以外,还有如下几种生成策略: 分布式ID是什么? INPUT策略 ASSIGN_ID策略 ASSIGN_UUID策略 雪花算法 ID生成策略对比 id生成策略控制 不同的表应用不同的id生成…

计算机组成原理 | 第六章:计算机的运算方法 | 进制转换 | 定点运算 | 浮点数运算

文章目录📚进位计数制🐇任意进制转十进制🐇十进制整数转换为n进制整数🐇十进制小数转换为n进制小数🐇二/八/十六进制的互换📚带符号的二进制数表示⭐️🐇原码表示法🐇补码表示法&…

“买卖股票的最佳时机” 系列——我来教你稳赚不亏~

目录 前言 一、买卖股票的最佳时机 ——>指定次数交易(1次) 1.1、dp定义 1.2、递推公式 1.3、遍历顺序 1.4、初始化 1.5、解题代码 二、买卖股票的最佳时机II ——>交易到结束 2.1、分析 2.2、解题代码 三、买股票的最佳时机III ——>…

【keepass】密码管理软件keepass的安全风险分析,如何在使用keepass的过程中避免泄露数据库信息和密码?

一、安全风险分析 1.1 不正规的来源 如果你使用非官方渠道获得keepass软件或某些插件,那么你的密码管理从一开始就没有安全性可言。因为这玩意是开源的啊,如果对方“很懂”,只要往里面植入一些代码,让你的数据库文件和密钥在后台…

react 项目 中 使用 Dllplugin 打包优化

webpack在build包的时候,有时候会遇到打包时间很长的问题,这里提供了一个解决方案,让打包如丝般顺滑~ 在用 Webpack 打包的时候,对于一些不经常更新的第三方库,比如 react,lodash,vue 我们希望…

C语言基础知识(37)

数组一维数组的定义:类型说明符 数组名【常量表达式】;先定义后引用;一维数组初始化时可以只对一部分元素初始化,在对全部数组元素初始化的时候可以部规定长度;但是若被定义的数组长度与提供的初始值不一样时&#xff…

【MySQL】MySQL索引夺命连环问「持续更新中」

文章目录1. 使用MySQL索引的原因2. 索引的三种常见底层数据结构以及优缺点3. 索引的常见类型以及它是如何发挥作用的?4. MyISAM 和 InnoDB 实现 B 树索引方式的区别是什么?5. InnoDB 为什么设计 B 树索引?6. 什么是覆盖索引和索引下推&#x…

【JavaSE专栏7】Java 常量、变量及其作用域

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

Python论文绘图利器seaborn.lineplot

Python论文绘图利器seaborn.lineplot 提示:前言 Python论文绘图利器seaborn.lineplot 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录Python论文绘图利器seaborn.lineplot前言一、导入包二、加载数据三…

嵌入式桌面管理系统Matchbox

简介 Matchbox(中文译名;火柴盒)是X Window System的免费和开源Window Manager,它主要用于嵌入式系统。取名Matchbox,很形象的表明它只适用于屏幕只有火柴盒大小的设备。 buildroot 移植MatchBox session managermat…

高斯秩变换 RankGauss 可能是比标准化/归一化更有效的连续值特征变换方法

文章目录 一、前言二、关键原理三、总结CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 高斯秩变换是 Kaggle 竞赛大佬 Michael Jahrer(Grandmaster) 提出的一种新颖的特征变换方法,他称之为 RankGauss。类似归一化(MinMax)和标准化(Standardization)的作用,…

帆软报表 V8 get_geo_json 任意文件读取漏洞

帆软报表 V8 get_geo_json 任意文件读取漏洞 CNVD-2018-04757 1.漏洞介绍 FineReport报表软件是一款纯Java编写的,集数据展示(报表)和数据录入(表单)功能于一身的企业级web报表工具。 FineReport v8.0版本存在任意文件读取漏洞,攻击者可利用漏洞读取网…

车载以太网 - 测试用例设计 - 头部信息检测 - 10

前面的篇幅已经把ISO 13400中DoIP软件协议规范部分进行详细的介绍说明,如果在文章中有哪些介绍的不充分或者不够详细,欢迎评论区留言讨论;接下来的文章主要介绍DoIP协议相关的测试用例设计,这也是一个测试工程师必备的重要技能之一,能否保证测试执行完成后,软件质量是达到…

超级详解洛谷P4011 孤岛营救问题(bfs超难题)(保证看懂)

题目 说明 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩。瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图。迷宫的外形是一个长方形&#xff…

阿里“云开发“小程序(uniCould)

博主ps: 网上资料少的可怜,哎,腾讯云涨价了,论服务器,我肯定选的阿里,再着你们对比下unicould的报价就知道了,如果有钱就另当别论了。 所以这片博文,博主试过之后,先抛出…

(day8) 自学Java——拼图小游戏

GUI(图形用户接口),是指采用图形化的方式显示操作界面。 Java中包含两套完整体系:AWT包,Swing包 一.代码 package com.abc.ui;import javax.swing.*; import javax.swing.border.BevelBorder; import java.awt.event.ActionEvent; import ja…

JavaEE day5 初识CSS 2

选择器 基本选择器:id选择器、类选择器、元素选择器 复合选择器:并列选择器、子孙选择器、孩子选择器 通配符选择器 *{.....} 任意元素:书写一些全局的规则时使用,就等于是一个全局都要遵守的规则 伪类选择器:针…

Lab 3: Midterm Review

Lab3 部分questionQ5:Its Always a Good PrimeQ6:Church numeralsQ5:It’s Always a Good Prime Implement div_by_primes_under, which takes in an integer nand returns an n-divisibility checker. An n-divisibility-checker is a funct…

【蓝桥杯选拔赛真题35】python回文数升级 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python输出N除以3的商 一、题目要求 1、编程实现 2、输入输出

二叉树22:二叉搜索树中的搜索

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:700. 二叉搜索树中的搜索 题目: 给定二叉搜索树(BST)的根节点 root 和一个整数…