Java 爬虫框架 webmagic 中三种 HTML&XML 页面信息抽取技术解析 -- Xpath & 正则表达式 & CSS选择器

webmagic根据xpath解析页面 昨天做页面的时候,有一个需求,大概要实现的功能就是用户输入一个网址url和一个xpath路径,根据这个xpath去用户给的url里解析,最后呈现出解析的结果,以达到用户判断自己写的xpath是否正确。之前百度了一个网上的一种用htmlclean来解析的,我试了一下,效果还不错,也比较简单,毕竟人家是专门用来做解析的嘛。后面因为项目里用的爬虫框架是webmagic,想的是最好不要引用别的框架了,于是就 阅读详情

简介:本文详细介绍了用 Java 爬虫框架 webmagic 爬取网站数据的时候,从下载到的 HTML 页面抽取所需信息的三种技术的使用方法:XPath,正则表达式以及 CSS 选择器。

1、XPath

XPath 是一种在 XML 文件中查找信息的语言,它使用路径表达式来选取 XML 文档中的节点或节点集,XPath 也适用于 HTML。为了对XPath的语法进行讲解,我们以下面的HTML案例作为讲解:

<div class="baidu-div">
	<table class="baidu-table">
		<tr>
			<td class="title">
				<a class="name" href="https://www.baidu.com" >百度</a>
			</td>
			<td class="content">
				<span id="section1">aaaaa</span>
			</td>
		</tr>
		<tr></tr>
	</table>
</div>
1.1 绝对路径与相对路径

XPath 表达式中包含 2 种类型的表达式:相对路径与绝对路径。

首先是绝对路径,绝对路径可以用于直接查找元素,不过弊端就是如果元素路径中有一点儿变动的话,XPath 失效。绝对路径以 “ / ” 开始。

其次是相对路径,相对路径以 " // " 开始,相对路径可以从 XML/HTML DOM 结构的任何位置开始,因此使用相对路径便不需要写很长的 XPath 表达式

我们以 webmagic 框架抽取 HTML 页面的元素为例(此处 page 为封装的 HTML 页面对象),如果我们想获得上面 HTML 文件中 class 属性值为 name 的 a 元素的文本内容,绝对路径写法如下:

String result = page.getHtml().xpath("/div/table/tr[1]/td[1]/a[1]/text()")
result 结果是 “百度”

而相对路径的写法如下:

String result = page.getHtml().xpath("//a[@class='name']/text()")
result 结果是 “百度”

可以看出,对比之下,在 XML/HTML 文档的 DOM 结构很复杂的时候,相对路径写起来比较方便。

1.2 Xpath 简介及常见的基础用法

XPath 中包含 7 种类型的节点,XPath 表达式用于从 XML 文档中选择节点或节点列表。

节点类型节点描述
root根节点
element元素
attribute属性
text文本
comment注释
processing instruction处理指令
namespace命名空间

其中,根节点、元素、属性、文本、注释是常见的 XPath 节点类型。下面是从 XML/HTML 文档中选择节点或节点列表的常见表达式。

表达式用法
nodename选取 XML 文件中所有名为 nodename 的元素
*选取当前页面的所有子元素
.选取当前节点
…选取当前节点的父节点
/从根节点开始
//node选择整个文件中的所有 node 元素
nodeA/nodeB对于每一个 nodeA 节点, 将其子节点中的所有 nodeB 节点添加到匹配结果中
nodeA//nodeB对于每一个 nodeA 节点, 将其后代节点中的所有 nodeB 节点添加到匹配结果中
@attr选取属性 attr
@*选取所有属性
text()选取节点的文本
last()选择最后一个节点
node[expr]选择满足条件表达式 expr 的 node 节点
node[number]选择第 number 个 node 节点(number 是数字)

下面结合下面的 HTML ,用几个案例来说明 XPath 的用法。

<div class="baidu-div">
	<table class="baidu-table">
		<tr>
			<td>
				<a class="name" href="https://www.baidu.com" value="baidu" >百度</a>
				<a class="name" href="https://www.baidu.com" value="use-baidu" >百度一下</a>
			</td>
			<td class='content'>
				<span>11111</span>
				<span>22222</span>
				<span>33333</span>
			</td>
		</tr>
		<tr></tr>
	</table>
</div>
  • 案例 1
String result = page.getHtml().xpath("//td[@class='content']/span[last()-1]/text()")

查找 class 属性为 content 的 td 元素下的倒数第二个 span 元素的文本内容,结果是:22222

  • 案例 2
String result = page.getHtml().xpath("//table[@class='baidu-table']/tr[1]/td[1]/[a2]/@value")

查找 class 属性为 baidu-table 的 table 元素下的第一个 tr 元素下的第一个 td 元素下的第二个 a 元素的 value属性值,结果为:use-baidu


2、正则表达式&CSS选择器

Webmagic 中用正则表达式抽取元素的函数如下

表达式用法示例
regex(String regex)使用正则表达式进行抽取
replace(String regex, String replacement)替换内容

关于正则表达式,可以参考:学习正则表达式的简单方法

CSS 选择器是与 XPath 类似的元素抽取方式,它在抽取规则相对简单的时候比 XPath 好用,但是如果写复杂一点的抽取规则,就相对要麻烦一点。其抽取函数如下:

表达式用法示例
css(String selector)功能同$(),使用Css选择器选择

关于CSS表达式,可以参考:CSS 教程

我们根据下面的 HTML 文档,对比一下使用 XPath 、正则表达式和 CSS 选择器抽取元素的区别。

<div class="div-level1">
	<table class="div-coding">
		<thead class="head">
			<span>标题</span>
		</thead>
		<tbody class="body">
			<tr class="tr-first">
				<td><span>编程 coding</span></td>
				<td><span>编程之美</span></td>
			</tr>
			<tr class="tr-second">
				<td><span>Java 语言</p></td>
				<td><span>Python 语言</span></td>
			</tr>
			<tr class="tr-third">
				<td>
					<p>1111</p>
				</td>
			</tr>
		</tbody>
	</table>
</div>
  • 案例1:抽取 HTML 文档中 <p> 标签中所有的内容
//XPath
String result = page.getHtml().xpath("//tr[@class='tr-third']/td/p/text()").all();

//正则表达式
String result = page.getHtml().regex("<p>(.*)+</p>").all();

//CSS选择器
String result = page.getHtml().css("tr.tr-third td p","text").all();
String result = page.getHtml().$("tr.tr-third td p","text").all();

当然,这几种抽取元素的方法也可以混合使用,这个要根据抽取的页面灵活选择。

个人水平有限,如有错误,欢迎各位朋友在评论区批评指正

数据解析之Xpath解析(超详细定位) XPath(XML Path Language)是一种XML的查询语言,他能在XML树状结构中寻找节点。XPath 用于在 XML 文档中通过元素和属性进行导航xml是一种标记语法的文本格式,xpath可以方便的定位xml中的元素和其中的属性值。lxml是python中的一个第三方模块,它包含了将html文本转成xml对象,和对对象执行xpath的功能表达式说明举例从根节点开始选取//从任意节点开始选取//input选取当前节点..选取当前节点的父节点//input/.. 阅读详情

相关推荐

告别高延迟!用RV1106+4G模块+libdatachannel搭建低功耗WebRTC监控,保姆级避坑指南

本文详细介绍了如何利用RV1106低功耗处理器、4G模块和libdatachannel库构建嵌入式WebRTC监控系统,解决高延迟问题。通过硬件选型、系统优化和核心代码实现,提供了一套完整的低功耗实时视频传输方案,特别适合智能安防和工业物联网应用。

weixin_42527401的博客 192

Spring boot + webmagic整合使用及xpath获取某个标签的所有子标签

WebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。对于小白来说也是非常快上手的爬虫框架。 webmagic有四大组件PageProcessor(页面解析器)、Scheduler(管理)、Downloader(下载)、Pipeline(持久化) webmagic这里不做过多介绍。想要了解更多请看官网webmagic官网在spring boot工程中引入webmagic依赖 1、创建XXXPageProcessor类实现PageProcessor并实

andyLyysh的博客 1679

STM32巡线小车PID调参实战:从五路灰度传感器数据到稳定运行的避坑指南

本文详细介绍了STM32巡线小车的PID调参实战,从五路灰度传感器数据处理到PID参数优化,提供了系统化的调试方法和常见问题解决方案。通过加权平均法计算偏移量,逐步调整比例、积分、微分参数,实现小车稳定巡线。文章还涵盖了定时器配置、控制周期优化及高级调试技巧,帮助开发者避开常见陷阱,提升巡线性能。

weixin_42570484的博客 193

通过WebMagic认识正则表达式和XPATH

最近在自学JAVA的过程中,偶然想到了做个爬虫程序,经过简单的对比,发现了WebMagic这个库,在使用库的过程中因为涉及到正则表达式和XPATH,所以做个笔记,记录一下,否则稍微过段时间不看就忘记了。 以内涵社区为例,打开内涵社区,然后右键“检查”(Chrome浏览器,得到如下html,这里只截取其中一部分作为示例) ![](http://upload-images.jianshu.

Michael Wing's workspace 2266

spark 适配达梦数据库

spark 适配达梦数据库 版本 spark3.0.0 scala2.12.10 DM Database Server 64 V8 步骤一: 引驱动包: SBT方式: "com.dameng" % "Dm8JdbcDriver18" % "8.1.0.157", maven方式: &lt;dependency&gt; &lt;groupId&gt;com.dameng&lt;/groupId&gt; &lt;artifactId&gt;Dm8JdbcDriver18&lt;/artifac

_@Eva@_的博客 2090

【技术拆解】Illumina边合成边测序(SBS)核心流程全解析 | 从文库构建到数据分析

本文深入解析了Illumina边合成边测序(SBS)技术的完整流程。从DNA样本的文库构建(片段化、加接头、扩增),到Flowcell上的簇生成(桥式PCR),再到核心的边合成边测序(SBS)循环(荧光标记、可逆终止),最后简述了从原始数据到生物学洞见的数据分析步骤,为理解这一主流高通量测序技术提供了清晰的框架。

weixin_29201859的博客 536

XPath--解析Html

导语:爬虫爬取的界面,大致分为静态界面、ajax异步加载、动态界面。静态界面直接获取HTML对象,然后使用XPath获取值 最有用的路径表达式: 表达式 描述 nodename 选取此节点的所有子节点。 / 从根节点选取。 // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 .

changwilling的博客 804

华为HCIP-001:PPPOE配置模拟实验

华为HCIP01:PPPOE配置模拟实验 实验环境 pppoe-client上面的接口信息 [AR1]dis ip interface brief *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 2 The number of interface that is DOWN in Physical is 1 Th

兔子乖乖 1798

WebMagic功能——XPath、CSS选择器、正则表达式 || 抽取元素API、获取结果API || ​​​​​​​获取链接||​​​​​​​使用Pipeline保存结果

WebMagic功能 实现PageProcessor 抽取元素Selectable WebMagic里主要使用了三种抽取技术:XPath、正则表达式和CSS选择器。另外,对于JSON格式的内容,可使用JsonPath进行解析。 XPath CSS选择器 CSS选择器是与XPath类似的语言。它比XPath写起来要简单一些,但是如果写复杂一点的抽取规则,就相对要麻烦一点。 正...

qq_39368007的博客 3109

ESP32蓝牙广播数据自定义指南:让你的设备更容易被手机发现

本文详细介绍了如何通过自定义ESP32蓝牙广播数据提升设备在手机端的可发现性。从广播数据结构、扫描响应优化到跨平台兼容性设置,提供了全面的技术指南和实战代码示例,帮助开发者解决智能硬件开发中的蓝牙连接难题。

weixin_29172201的博客 271

CMOS锁相环核心:四种鉴频鉴相器(PFD)结构深度剖析与选型指南

本文深入剖析了CMOS锁相环中四种鉴频鉴相器(PFD)的结构与性能,包括传统RS触发器型、非时钟型、预充电型和边沿触发型PFD。通过详细的电路分析、实测数据和工程案例,提供了PFD选型的实用指南,帮助工程师根据速度、功耗和精度需求选择最优方案,提升锁相环设计效率。

weixin_42530458的博客 587

WebMagic快速入门

一、WebMagic介绍 WebMagic的结构分为Downloader、PageProcessor、Scheduler、Pipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。WebMagic的设计参考了Scapy,但是实现方式更Java化一些。 而Spider则将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心。 1.1 WebMagic的四个组件 1

weixin_45829957的博客 4719

Ollama本地大模型-个性化AI:训练自己的风格模型和数据投喂打造专属智能体验

之前我们使用Ollama下载了deepseek模型,现在我想将其训练成自己风格的模型,应该怎么做?

瑶山的博客 1782

Java爬虫—WebMagic

WebMagic企业开发,比HttpClient和JSoup更方便WebMagic有DownLoad,PageProcessor,Schedule,Pipeline四大组件,并有Spider将他们组织起来,这四大组件对应就是爬虫的下载,处理,管理,持久化等功能。

qq_52655865的博客 2082

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

爬虫学习4——Xpath爬取网页信息

xpath是在XML文档中搜索内容的一门语言,我们常见的html是xml的一个子集 目录 安装lxml模块 获取网页数据 text()拿文本 。xpath使用[1]选择同种标签的第一个。/a[@href='']根据属性href的值选择特定标签 //表示后代(子标签,孙子标签,重孙子标签)。*表示任意的节点,通配符。使用@拿到属性值 ./表示当前节点 安装lxml模块 pip install lxml 获取网页数据 text()拿文本 。xpath使用[1]选择同种标签的第一个。/a

qq_57099024的博客 3704

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java爬虫系列第三讲-获取页面中绝对路径的各种方法

在使用webmgiac的过程中,很多时候我们需要抓取连接的绝对路径,总结了几种方法,示例代码放在最后。 以和讯网的一个页面为例: xpath方式获取 log.info("{}", page.getHtml().xpath("//div[@id='cyldata']").links().all()); log.info("{}", page.getHtml().xpath("//div[@id='...

路人甲Java 1214

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

网络爬虫——WebMagic详解(一)

Downloader、PageProcessor、Scheduler、Pipeline都是Spider的一个属性,这些属性是可以自由设置的,通过设置这个属性可以实现不同的功能。核心部分(webmagic-core)是一个精简的、模块化的爬虫实现,而扩展部分则包括一些便利的、实用性的功能。第一部分关于爬虫的配置,包括编码、抓取间隔、超时时间、重试次数等,也包括一些模拟的参数,例如User Agent、cookie,以及代理的设置,我们会在第4部分-“爬虫的配置”里进行介绍。爬虫的监控是0.5.0新增的功能。

吴声子夜歌的博客 5372

webmagic使用手册

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

weixin_34233679的博客 515

【Java爬虫框架-webmagic的使用心得】

在后续的高版本中,选择器仅提供了get()方法,当使用xpath时,会将连同标签本身一起输出,大概思路是,利用浏览器去打开渲染好的页面,再从页面里根据去爬取标签获得想要的内容。第一个方法就是 抓 ajax接口,直接拿到json数据。但是如果没有接口,数据是直接渲染的,就拿不到了,示例获取a内的 href值。

lw_w2的专栏 371

java jsoupxpath_GitHub - zhegexiaohuozi/JsoupXpath: 纯Java实现的支持W3C Xpath 1.0标准语法的HTML解析器。A html parse...

JsoupXpath纯Java实现的支持W3C Xpath 1.0标准语法的HTML解析器。A html parser with xpath base on Jsoup and Antlr4.Maybe it is the best in java,Just try it.简介JsoupXpath 是一款纯Java开发的使用xpath解析提取html数据的解析器,针对html解析完全重新实现了W3...

weixin_39978444的博客 205

html xpath java_XPath JAVA用法总结及代码样例

一、基本概念介绍XPath 是一门在 XML 文档中查找信息的语言, 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。因此,对 XPath 的理解是很多高级 XML 应用的基础。XPath非常类似对数据库操作的SQL语言,或者说JQuery,它可以方便开发者抓起文档中需要的...

weixin_27180827的博客 272

基于java实现XPath解析html和xml

java用xpath需要导入JsoupXpath-0.3.2.jar架包。@ : 指定属性(一般写于[]中或直接写在/后面表示将属性输出)text(): 当前控件下的文本。

记录所学所思所想所吾 890

[Java爬虫-WebMagic]-03-解析Html源码

解析Html源码 在上一篇中,获取了网页的html源码,但是里面东西太多了,并不是我们想要的结果 所以我们需要提取我们想要的结果 使用Selectable接口,你可以直接完成页面元素的链式抽取,也无需去关心抽取的细节。 我们通过Page对象获取了html对象,如果深入的话会发现,Html对象的父类实现了Selectable接口,它是可以进行提取元素的。 Selectable中的部分API ...

Timeless小帅的博客 1343

WEB自动化-获取tbody下面tr的个数

比如代码: &amp;lt;table id=&quot;formTable&quot;&amp;gt; &amp;lt;tbody&amp;gt; &amp;lt;tr&amp;gt;tr1&amp;lt;/tr&amp;gt; &amp;lt;tr&amp;gt;tr2&amp;lt;/tr&amp;gt; &amp;lt;/tbody&amp;gt; &amp;lt;/table&amp;gt; 获取方法:

weixin_42863949的博客 8994

WebMagic框架

Java爬虫,webmagic框架的使用及其组件

g877835148的博客 1527

xpath java html_在Java中使用XPath包含HTML

关于这个:I could use HTML Cleaner to clean to XML, serialize it back to astring, and use that with another XPath library, but I can’t find agood java XPath evaluator that works on a string.这正是我要做的(除了你不需要在...

weixin_29765215的博客 208
上一篇: 使用 IDEA 搭建 Springboot 整合 mybatis 项目详解
下一篇: Java爬虫案例 -- springboot 整合 webmagic 爬取爱站网百度权重数据(保姆级教程)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值