【Java爬虫】HttpClient+Jsoup实现爬取校内新闻

news2025/3/1 16:20:34

警告

网络爬虫作为一门技术,在使用过程中,应该遵守Robots协议。采集数据时应注意礼貌,不允许爬的网站尽量不要短时间大频率爬取,涉及hdd的网站更是不要去满足自己的好奇心,不然说不准哪天就和吴签一起吃大碗宽面了...

介绍

接上一篇博客,本篇主要讲如何利用上一篇的HttpUtil工具类实现爬取校内新闻

上篇地址:

https://blog.csdn.net/m0_64261982/article/details/129409149?spm=1001.2014.3001.5502

实现思路

  1. 利用HttpCllient(也就是上一篇写好的HttpUtil工具类)实现网页的下载

  1. 利用Jsoup实现解析HTML内容

  1. 利用Jsoup内的css选择器方法搜索新闻对应的标签、属性

注意:

  • 一定要先在浏览器观察网页的页面源代码,因为每个网页的写法不一样,有的个人网站就不规整;

  • 还有就是观察我们所要提取的网页的特点

观察源码

0. 在网站主页加上robots.txt查看是否有robots协议

发现没有robots协议,那就随便爬了

  1. 上官网看源码

通过观察源码,我们可以发现,这次要爬取的内容比较简单,我们要的东西都在标签<li ></li>里面,网页还算规整

  1. 怎么爬取下一页

‘下一页’无非就是一个超链接,我们只需要观察超链接的内容,我们发现,这个新闻页的构成是这样的

  1. 统一的前缀:https://news.sxau.edu.cn/xxyw/

  1. 一共有329页,第二页对应资源 328.htm、第三页 327.htm

  1. 那就定义一个变量就好了,初始值begin为 328,每爬完一页,begin--

至此,就可以爬了

代码

public class JsoupDemo01 {
    private static String url;
    private static String html;
    private static Document doc;

    public static void main(String[] args) throws IOException {
        url = "https://news.sxau.edu.cn/xxyw.htm";
        html =  HttpUtil.getContent(url,"UTF-8");
        doc = Jsoup.parse(html);


        //使用css选择器输出农大10天内的新闻
        StringBuffer buffer = new StringBuffer();
        int count = 1;
        int begin = 329;
        for (int i = 1; i < 10; i++) {//这里只爬取9页
            System.out.println("========这是第 "+count+" /9页============");
            cssSelector(doc,"li",buffer);
            html = HttpUtil.getContent("https://news.sxau.edu.cn/xxyw/"+begin+".htm","UTF-8");
            doc = Jsoup.parse(html);
            begin--;
            count++;
        }
        System.out.println(buffer.toString());
        
    }

/**
     * css选择器
     * @param doc Document对象
     * @param cssQuery 查询的格式
     * @param buffer 搜索结构返回到StringBUffer对象中去
     */
    public static void cssSelector(Document doc,String cssQuery,StringBuffer buffer){
        Elements elements = doc.select(cssQuery);
        for (Element element : elements){   //遍历每个标签,并输出标签内容 <a>内容</a>
            String title = element.text();
            buffer.append(title);
            if (title.matches(".*次")){
                buffer.append("\n");
            }
        }
    }
}

运行效果

================ HttpClient 开始下载网页 ===================
请求成功! 状态码 = 200
================= HttpClient 处理完毕,即将交由Jsoup处理 ====================
========这是第 1 /9页============
================ HttpClient 开始下载网页 ===================
请求成功! 状态码 = 200
================= HttpClient 处理完毕,即将交由Jsoup处理 ====================
========这是第 2 /9页============
================ HttpClient 开始下载网页 ===================
请求成功! 状态码 = 200
================= HttpClient 处理完毕,即将交由Jsoup处理 ====================
========这是第 3 /9页============
================ HttpClient 开始下载网页 ===================
请求成功! 状态码 = 200
================= HttpClient 处理完毕,即将交由Jsoup处理 ====================
========这是第 4 /9页============
================ HttpClient 开始下载网页 ===================
请求成功! 状态码 = 200
================= HttpClient 处理完毕,即将交由Jsoup处理 ====================
========这是第 5 /9页============
================ HttpClient 开始下载网页 ===================
请求成功! 状态码 = 200
================= HttpClient 处理完毕,即将交由Jsoup处理 ====================
========这是第 6 /9页============
================ HttpClient 开始下载网页 ===================
请求成功! 状态码 = 200
================= HttpClient 处理完毕,即将交由Jsoup处理 ====================
========这是第 7 /9页============
================ HttpClient 开始下载网页 ===================
请求成功! 状态码 = 200
================= HttpClient 处理完毕,即将交由Jsoup处理 ====================
========这是第 8 /9页============
================ HttpClient 开始下载网页 ===================
请求成功! 状态码 = 200
================= HttpClient 处理完毕,即将交由Jsoup处理 ====================
========这是第 9 /9页============
================ HttpClient 开始下载网页 ===================
请求成功! 状态码 = 200
================= HttpClient 处理完毕,即将交由Jsoup处理 ====================
学校主页学校主页本网首页学校要闻综合新闻学术活动学术成果媒体关注农大人物校史钩沉校内通知农大公告农大校报视频农大丁 香 苑专题宣传阅读推荐学校妇女联合会成立暨第一次妇女代表大会胜利召开 2023-03-09 次
我校无人机创新创业团队在第八届中国国际“互联网+”大学生创新创业大赛... 2023-03-09 次
我校与上党区签约共建乡村振兴示范村 2023-03-09 次
学校召开全国大学英语四六级考试协调部署会 2023-03-09 次
学校举行学习贯彻党的二十大精神宣讲报告会 2023-03-08 次
我校青年掀起“学雷锋”志愿服务热潮 2023-03-06 次
学校举办学雷锋志愿服务分享会 2023-03-06 次
我校干部师生热切关注全国“两会” 2023-03-06 次
学校召开安全稳定工作部署会 2023-03-04 次
校第七届教职工代表大会第三次会议召开 2023-03-04 次
我校13项科研成果荣获2022年度山西省科学技术奖 2023-03-04 次
我校150名处级干部接受党风廉政警示教育 2023-03-03 次
校党委启动第六轮校内巡察工作 2023-03-03 次
学校召开马克思主义学院建设推进会 2023-03-02 次
学校召开2023年全面从严治党工作会议 2023-03-02 次
我校2个基地入选首批省级大中小学生劳动教育实践基地 2023-03-02 次
校党委书记廖允成赴我校南繁育种基地等地调研 2023-03-01 次
学校召开2023年研究生教育工作部署会 2023-03-01 次
校党委开展第五轮巡察反馈 2023-02-27 次
我校4案例入选2022年度全省教育系统党建创新案例 2023-02-26 次
292022.11学校开设专栏“同心齐抗疫”展示各单位抗疫事迹272022.08学校开设专栏“农业科技这十年”展示近十年农业科...182022.04学校开辟专栏系列宣传我校众志成城抗击疫情事迹062022.04山西农业大学2022年博士招聘公告242021.11【合署改革二周年】“改革蹚新路 奋进新征程”征文...1山西农业大学2022年博士招聘公告 2022-04-06次
2学校开设专栏“农业科技这十年”展示近十年农业科... 2022-08-27次
3学校开设专栏“同心齐抗疫”展示各单位抗疫事迹 2022-11-29次
4【合署改革二周年】“改革蹚新路 奋进新征程”征文... 2021-11-24次
5学校开辟专栏系列宣传我校众志成城抗击疫情事迹 2022-04-18次
学校主页学校主页本网首页学校要闻综合新闻学术活动学术成果媒体关注农大人物校史钩沉校内通知农大公告农大校报视频农大丁 香 苑专题宣传阅读推荐我校25项标准入选山西省2023年农业农村领域主推标准 2023-02-23 次
我校33个品种入选山西省2023年主要粮油作物和畜禽水产主推品种 2023-02-23 次
古县政府一行来校考察调研 2023-02-23 次
学校召开2023年度国家自然(社会)科学基金项目申报推进会 2023-02-23 次
省领导吴存荣、吴俊清关注山西·太谷第二十届科技节暨全国农业科技现代化... 2023-02-22 次
河南理工大学副书记石培哲来我校调研 2023-02-21 次
开学首日我校整体教学秩序良好 2023-02-20 次
我校组织晋中片区大中小学思政课一体化建设特色教学示范研讨活动 2023-02-18 次
校领导实地检查开学准备工作 2023-02-17 次
学校举办特优作物功能基因组学未来论坛 2023-02-17 次
省级双创示范基地专家组来校调研评估 2023-02-16 次
学校召开春季学期学生工作专题会 2023-02-16 次


...这里省略几百条



Process finished with exit code 0

写在最后

如果要更新爬取的内容,可以使用Set集合来保存,这样会自动过滤掉重复的内容。

有哪里错了的,或者有更好的建议,可以私信或者留言,谢谢大家!

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

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

相关文章

[洛谷-P2585][ZJOI2006]三色二叉树(树形DP+状态机DP)

[洛谷-P2585][ZJOI2006]三色二叉树&#xff08;树形DP状态机DP&#xff09;一、题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示数据规模与约定二、分析1、递归建树2、树形DP 状态机DP&#xff08;1&#xff09;状态表示&#xff08;2&#xff09;状态转移三、…

C++11异步编程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言1、std::future和std::shared_future1.1 std:future1.2 std::shared_future2、std::async3、std::promise4、std::packaged_task前言 C11提供了异步操作相关的类…

Vue3电商项目实战-结算支付 2【03-结算-对话框组件封装、04-结算-收货地址-切换】

文章目录03-结算-对话框组件封装04-结算-收货地址-切换03-结算-对话框组件封装 目的&#xff1a;实现一个对话框组件可设置标题&#xff0c;动态插入内容&#xff0c;动态插入底部操作按钮&#xff0c;打开关闭功能。 大致步骤&#xff1a; 参照xtx-confirm定义一个基础布局实…

MFC常用控件使用(文本框、编辑框、下拉框、列表控件、树控件)

简介 本文章主要介绍下MFC常用控件的使用&#xff0c;包括静态文本框(Static Text)、编辑框(Edit Control)、下拉框(Combo Box)、列表控件(List Control)、树控件(Tree Control)的使用。 创建项目 我们选择 文件->新建->新建项目&#xff0c;选择MFC程序 选择基于对话…

二叉树的三种遍历

二叉树的遍历可以有&#xff1a;先序遍历、中序遍历、后序遍历先序遍历&#xff1a;根、左子树&#xff0c;右子树中序遍历&#xff1a;左子树、根、右子树后序遍历&#xff1a;左子树、右子树、根下面是我画图理解三种遍历&#xff1a;二叉树里都是分为左子树和右子树。分治思…

Linux文件基础I/O

文件IO文件的常识基础IO为什么要学习操作系统的文件操作C语言对于函数接口的使用接口函数介绍如何理解文件文件描述符重定向更新给模拟实现的shell增加重定向功能为什么linux下一切皆文件&#xff1f;缓冲区为什么要有缓冲区缓冲区对应的刷新策略缓冲区的位置在哪里文件的常识 …

VSCode:添加SSH远程连接

有的时候我们的代码保存于远程服务器&#xff0c;通过VSCode可以通过SSH进行连接&#xff0c;完成远程的编辑。在VSCode的扩展中安装Remote - SSH点击左侧工具栏的远程资源管理器&#xff0c;然后点加号输入ssh的机器及用户名选择一个用于保存ssh配置文件的路径&#xff0c;默认…

Tabs Studio 5.3.0 多功能标签 Crack

在 Visual Studio 2022 和 SQL Server Management Studio 中轻松处理任意数量和类型的文档 你爱写代码&#xff0c;不会好好扫描文档找到你需要切换到的文件名&#xff0c;然后扫描文件菜单下拉列表&#xff0c;然后求助于解决方案资源管理器或搜索。只有在您需要切换到另一个…

javascript入门基础

目录 前言 引入&#xff1a;html中嵌入javascript有三种方式 0. 变量&#xff08;var、let&#xff09; 1. 函数 1.1 普通函数 和 箭头函数 1.1.2 普通函数中的this 1.1.3 箭头函数没有自己的this 1.1.4 普通函数有arguments方法&#xff0c;箭头函数没有 1.1.5 箭头函…

MS python学习(9)

开始学习第二辑 more python for beginners talking about formating https://learn.microsoft.com/en-us/shows/more-python-for-beginners/formatting-and-linting–more-python-for-beginners-2-of-20 Formating 代码格式化&#xff1a;使用pylint工具来帮助遵循PEP8(pyt…

conda创建一个地理开发环境

conda创建一个地理开发环境1. 环境内包说明2. 创建yml文件3. 创建地理开发环境使用conda安装包的时候&#xff0c;经常遇到包之间相互冲突。为了方便配置环境&#xff0c;测试了常用的地理开发所需要的各种包&#xff0c;生成了yml文件方便一键安装。 Linux下pip基本可以成功安…

手敲Mybatis(七)-细化xml语句解析和构建

前言为什么这一章节要细分之前的解析xml处理逻辑&#xff0c;原因是违反了单一原则设计&#xff0c;职责并不明确&#xff0c;将Sql语句、参数、返回值等等一切都进行解析&#xff0c;那么这种的需要拆开&#xff0c;为了后面可维护可扩展&#xff0c;例如Mapper级别的有mapper…

k8s client-go源码解析之informer三

Informer&#xff08;三&#xff09; 注意&#xff1a;本文内容为学习笔记&#xff0c;内容为个人见解&#xff0c;不保证准确性&#xff0c;但欢迎大家讨论何指教。 觉得文章不错请关注跟博客及github 本篇介绍DeltaFIFO及indexer。 informer大致工作流程如下&#xff1a; …

顺序表来喏!!!

前言&#xff1a;还记得前面的文章&#xff1a;《通讯录的实现》吗&#xff1f;通讯录的完成就借助了顺序表这种数据结构&#xff01;&#xff01;&#xff01;那么今天我们就来介绍我们的顺序表介绍顺序表前&#xff0c;我们来了解一下线性表的概念线性表&#xff1a;线性表&a…

mysql笔试题18道

部门表、员工表、薪水等级表 1.取得每个部门最高薪水人员名称 第一步&#xff1a;取得每个部门最高薪水作为临时表t select deptno,max(sal) as maxSal from emp group by deptno 第二步&#xff1a;临时表t与emp表连接条件 e.deptnot.deptno and e.salt.maxSal select …

Spring - Spring IoC 容器相关面试题总结

文章目录01. Spring IoC 和依赖注入是什么&#xff1f;02. Spring IoC 的优点和缺点分别是什么&#xff1f;03. Spring IoC 有什么作用和功能&#xff1f;04. Spring 依赖注入的方式&#xff1f;05. Spring 构造器注入和 setter 方法注入的区别&#xff1f;06. Spring 依赖注入…

嵌入式系统实验——【玄武F103开发板】按key1熄灭两个LED灯、松开恢复点亮

这里写目录标题一、任务目标&#xff08;一&#xff09;分析二、设计思路&#xff08;一&#xff09;开启KEY1对应的GPIOx时钟1.找到KEY1&#xff08;PE3&#xff09;所在的GPIOx端口2.开启GPIOE端口时钟3.清空PE3的端口位4.设置PE3的端口位为输出模式的上拉模式5.一个易错点&a…

二分——力扣篇

二分——力扣篇搜索旋转排序数组搜索旋转排序数组II寻找旋转排序数组中的最小值寻找旋转排序数组中的最小值II搜索旋转排序数组 定理一&#xff1a;只有在顺序区间内才可以通过区间两端的数值判断target是否在其中。 定理二&#xff1a;判断顺序区间还是乱序区间&#xff0c;只…

案例学习20之内存长期占用导致系统缓慢

前言&#xff1a; 发现问题&#xff0c;解决问题&#xff0c;是贯穿整个项目开发过程的事情&#xff0c;能够处理更多的问题&#xff0c;随着经验的丰富&#xff0c;提前预知更多的问题&#xff0c;让问题不出现是最好的解决问题方式。 问题背景&#xff1a; 项目运行过程中出现…

基于redis实现点赞数,点击数,排行榜

使用场景 对于某些视频或者文章有点赞数和点击数, 通过这些数据就可以进行排行榜的功能了 使用异步队列 redis的集合 A.php //点击数 $redis->zIncrBy(click.:.date(Ymd),1,$videoId); //点赞数 $redis->zIncrBy(love.:.$videoId,1,$$user); //获取当前video的播放数…