当前位置: 首页 > news >正文

Java:爬虫htmlunit抓取a标签

如果对htmlunit还不了解的话可以参考Java:爬虫htmlunit-CSDN博客

了解了htmlunit之后,我们再来学习如何在页面中抓取我们想要的数据,我们在学习初期可以找一些结构比较清晰的网站来做测试爬取,首先我们随意找个网站如下:

当我们打开网站F12,进入开发者模式,我们在学习之前我们需要知道我们要爬取什么数据,了解数据和页面的结构。就拿这个网站来说我们如果要爬取它的数据,首先需要获取他们的类别,在获取类别下的数据。那我们在点击类别的时候,需要分析下地址有没有变化,如果变化了,我们需要拿到指定类别的地址,然后和域名拼接成完整地址抓取其类目下的数据。

为什么要拼接呢?因为在网站类目使用的跳转,会自动加上站点地址;我们在爬取的时候是没有该网站域名的。

这个列子非常简单,我们直接要获取它的类别跳转的地址,再根据爬取的地址爬取其详情数据;

分析下来我们只要抓取该页面的a标签即可。这个在 htmlunit 中提供了 HtmlAnchor 直接可以获取所有的a标签,代码如下:

/*** <b>Function: </b> todo** @program: 根据页面信息获取子页面信息* @Package: com.kingbal.king.dmp* @author: dingcho* @date: 2024/06/13* @version: 1.0* @Copyright: 2024 www.kingbal.com Inc. All rights reserved.*/
@Slf4j
public class BaseTest {public static void main(String[] args) throws Exception {HtmlPage page = SpiderUtils.crawlPageWithoutAnalyseJs("https://www.yiyiwiy.com/");//System.err.println(page);List<HtmlAnchor> htmlAnchorList = page.getAnchors();log.info("htmlAnchorList.size() >>" + htmlAnchorList.size());log.info("********************");htmlAnchorList.forEach(f -> {if(f.getHrefAttribute().contains("vodtypehtml")){log.info(f.getHrefAttribute());}});log.info("********************");}}

我们抓取的是所有页面的a标签,所以我们需要过滤掉我们不需要的地址:

if(f.getHrefAttribute().contains("vodtypehtml")){log.info(f.getHrefAttribute());
}

然后执行代码,就可以获取到对应数据

相关文章:

  • 【讲解下目标追踪】
  • AWD攻防比赛流程手册
  • 23.3 时间-解析、计算、比较时间
  • iCopy for Mac 剪切板 粘贴工具 历史记录 安装(保姆级教程,新手小白轻松上手)
  • 课设--学生成绩管理系统(二)
  • FinalShell 连接虚拟机超时,主机ping不通虚拟机,解决
  • MongoDB使用$addToSet向数组中添加元素
  • 设备驱动程序和 PCI 电源管理
  • 健身行动日
  • 如何生成自定义二维码和实现安全便捷的扫码登录功能以及对接企业微信API
  • 打破安全设备孤岛,多源威胁检测与响应(XDR)如何构建一体化安全防线
  • 51单片机入门
  • AWS无服务器 应用程序开发—第三章 后端服务(AWS AppSync)
  • 秋招突击——6/16——复习{整理昨天的面试资料}——新作{删除链表倒数第n个节点}
  • 信用VS抵押:贷款的两面镜子
  • 【Leetcode】104. 二叉树的最大深度
  • Js基础知识(四) - js运行原理与机制
  • js继承的实现方法
  • js如何打印object对象
  • Koa2 之文件上传下载
  • Median of Two Sorted Arrays
  • Nodejs和JavaWeb协助开发
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • vue-router的history模式发布配置
  • 初探 Vue 生命周期和钩子函数
  • 从PHP迁移至Golang - 基础篇
  • 服务器之间,相同帐号,实现免密钥登录
  • 开源地图数据可视化库——mapnik
  • 数据可视化之 Sankey 桑基图的实现
  • 微服务入门【系列视频课程】
  • 小程序button引导用户授权
  • #LLM入门|Prompt#3.3_存储_Memory
  • (007)XHTML文档之标题——h1~h6
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (4)logging(日志模块)
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)springcloud实战之config配置中心
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (每日一问)基础知识:堆与栈的区别
  • (三) diretfbrc详解
  • (转)linux 命令大全
  • (转)德国人的记事本
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .DFS.
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @NotNull、@NotEmpty 和 @NotBlank 区别
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [AI Google] 使用 Gemini 取得更多成就:试用 1.5 Pro 和更多智能功能
  • [Android]使用Retrofit进行网络请求