Spring Boot html页面解析之jsoup

目的

我们要对一个页面进行数据抓取,并导出doc文档

html解析器

jsoup

直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。

htmlparser

提供了线性和嵌套两种方式来解析网页,主要用于 html 网页的转换(Transformation) 以及网页内容的抽取 (Extraction)。

jsoup和htmlparser对比

jsoup可以直接拿,类似jquery的选择器一样用起来比较好上手。htmlparser结构简单功能强大,难上手,但是自主度高

准备doc文档并另存为xml文件

在这里插入图片描述

项目图片

在这里插入图片描述

pom.xml

<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.1</version>
</dependency>

操作流程

把xml文件修改名为Hibernate.ftl后拷贝文件到src/main/resources

原来xml文件

<w:body><w:p><w:pPr><w:pStyle w:val="2" /><w:jc w:val="center" /><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-CN" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-CN" /></w:rPr><w:t>Hibernate</w:t></w:r></w:p><w:p><w:pPr><w:rPr><w:rFonts w:hint="eastAsia" w:ascii="微软雅黑" w:hAnsi="微软雅黑" w:eastAsia="微软雅黑" w:cs="微软雅黑" /><w:b w:val="0" /><w:i w:val="0" /><w:caps w:val="0" /><w:color w:val="555555" /><w:spacing w:val="0" /><w:sz w:val="21" /><w:szCs w:val="21" /><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="微软雅黑" w:hAnsi="微软雅黑" w:eastAsia="微软雅黑" w:cs="微软雅黑" /><w:b w:val="0" /><w:i w:val="0" /><w:caps w:val="0" /><w:color w:val="555555" /><w:spacing w:val="0" /><w:sz w:val="21" /><w:szCs w:val="21" /><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF" /></w:rPr><w:t>你还在为不知道怎样正确使用Hibernate而纠结吗</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="微软雅黑" w:hAnsi="微软雅黑" w:eastAsia="微软雅黑" w:cs="微软雅黑" /><w:b w:val="0" /><w:i w:val="0" /><w:caps w:val="0" /><w:color w:val="555555" /><w:spacing w:val="0" /><w:sz w:val="21" /><w:szCs w:val="21" /><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF" /><w:lang w:val="en-US" /></w:rPr><w:t>,</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="eastAsia" w:ascii="微软雅黑" w:hAnsi="微软雅黑" w:eastAsia="微软雅黑" w:cs="微软雅黑" /><w:b w:val="0" /><w:i w:val="0" /><w:caps w:val="0" /><w:color w:val="555555" /><w:spacing w:val="0" /><w:sz w:val="21" /><w:szCs w:val="21" /><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF" /></w:rPr><w:t>你还在为不知道怎样配置映射文件而郁闷吗</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="3" /><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:t>Hibernate 系列教</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:t>1-枚举单例类</w:t></w:r></w:p><w:p><w:pPr><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-CN" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:fldChar w:fldCharType="begin" /></w:r><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:instrText xml:space="preserve"> HYPERLINK &quot;http://blog.csdn.net/je_ge/article/details/53234944&quot; </w:instrText></w:r><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:fldChar w:fldCharType="separate" /></w:r><w:r><w:rPr><w:rStyle w:val="7" /><w:rFonts w:hint="eastAsia" /></w:rPr><w:t>http://blog.csdn.net/je_ge/article/details/53234944</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:fldChar w:fldCharType="end" /></w:r></w:p><w:sectPr><w:pgSz w:w="11906" w:h="16838" /><w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0" /><w:cols w:space="720" w:num="1" /><w:docGrid w:type="lines" w:linePitch="312" w:charSpace="0" /></w:sectPr>
</w:body>

现在ftl文件修改地方

<w:body><w:p><w:pPr><w:pStyle w:val="2" /><w:jc w:val="center" /><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-CN" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-CN" /></w:rPr><w:t>${title}</w:t></w:r></w:p><w:p><w:pPr><w:rPr><w:rFonts w:hint="eastAsia" w:ascii="微软雅黑" w:hAnsi="微软雅黑" w:eastAsia="微软雅黑" w:cs="微软雅黑" /><w:b w:val="0" /><w:i w:val="0" /><w:caps w:val="0" /><w:color w:val="555555" /><w:spacing w:val="0" /><w:sz w:val="21" /><w:szCs w:val="21" /><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="微软雅黑" w:hAnsi="微软雅黑" w:eastAsia="微软雅黑" w:cs="微软雅黑" /><w:b w:val="0" /><w:i w:val="0" /><w:caps w:val="0" /><w:color w:val="555555" /><w:spacing w:val="0" /><w:sz w:val="21" /><w:szCs w:val="21" /><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF" /></w:rPr><w:t>${content}</w:t></w:r></w:p><#list list as map> <w:p><w:pPr><w:pStyle w:val="3" /><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:t>${map.title}</w:t></w:r></w:p><w:p><w:pPr><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-CN" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:fldChar w:fldCharType="begin" /></w:r><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:instrText xml:space="preserve"> HYPERLINK &quot;${map.title}&quot; </w:instrText></w:r><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:fldChar w:fldCharType="separate" /></w:r><w:r><w:rPr><w:rStyle w:val="7" /><w:rFonts w:hint="eastAsia" /></w:rPr><w:t>${map.href}</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="eastAsia" /></w:rPr><w:fldChar w:fldCharType="end" /></w:r></w:p></#list><w:sectPr><w:pgSz w:w="11906" w:h="16838" /><w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992"w:gutter="0" /><w:cols w:space="720" w:num="1" /><w:docGrid w:type="lines" w:linePitch="312" w:charSpace="0" /></w:sectPr>
</w:body>

测试类JsoupTest

package com.jege.spring.boot;import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;import freemarker.template.Template;/*** 获取连接,写出doc文件*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest()
public class JsoupTest {// 读取博客信息的地址private final static String URL_ADDRESS = "http://blog.csdn.net/je_ge?viewmode=contents";// <h1>// <span class="link_title"><a href="/je_ge/article/details/53366556">// </a></span>// </h1>private Elements getLinks() throws Exception {// 新版本需要设置浏览器头信息Document document = Jsoup.connect(URL_ADDRESS).userAgent("Mozilla/5.0 (Windows NT 7.0; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0").get();return document.select("h1 a");}@Testpublic void testGetLinks() throws Exception {Elements links = getLinks();for (int i = links.size() - 1; i >= 0; i--) {Element link = links.get(i);String attr = link.attr("href");String linkText = link.text();System.out.println(linkText);System.out.println(attr);}System.out.println("size:" + links.size());}@Autowiredprivate FreeMarkerConfigurer freeMarkerConfigurer;@Testpublic void writeHibernate() throws Exception {String title = "Hibernate 系列教程";String content = "Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。";Elements links = getLinks();List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();for (Element link : links) {String linkText = link.text();if (linkText.contains(title)) {Map<String, Object> map = new HashMap<String, Object>();map.put("href", "http://blog.csdn.net/" + link.attr("href"));map.put("title", linkText.replaceAll(title, ""));list.add(map);}}Collections.reverse(list);System.out.println("size:" + links.size());freeMarkerConfigurer.getConfiguration().setClassForTemplateLoading(getClass(), "/");Template template = freeMarkerConfigurer.getConfiguration().getTemplate("Hibernate.ftl");Map<String, Object> root = new HashMap<String, Object>();root.put("title", title);root.put("content", content);root.put("list", list);template.process(root, new FileWriter(new File(title + ".doc")));}}

如果感觉不错的话记得点赞哟!!!

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

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

相关文章

2021年五一杯数学建模A题(疫苗生产调度问题)详细分析

目录 一、基本介绍 1.1 题目描述 1.2 待解决问题 二、问题分析与求解 2.1 问题一分析与求解 2.2 问题二分析与求解 2.3 问题三分析与求解 2.4 问题四分析与求解 2.5 问题五分析与求解 三、完整代码 四、总结 一、基本介绍 1.1 题目描述 新冠肺炎肆虐全球&#xff0…

Spring Boot EasyPoi导出Excel下载

Java关于excel的操作 Java Excel俗称jxl&#xff0c;可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件&#xff0c;现在基本没有更新了 Apache POI是Apache基金组织Jakarta项目的子项目&#xff0c;它包括一系列的API&#xff0c;可以操作多种格式的Mic…

2021年华中杯A题(马赛克瓷砖选色问题)详细分析

目录 一、基本介绍 1.1 题目描述 1.2 待解决问题 二、问题分析与求解 2.1 问题一分析与求解 2.2 问题二分析与求解 2.3 问题三分析与求解 三、完整代码 四、总结 一、基本介绍 1.1 题目描述 马赛克瓷砖是一种尺寸较小&#xff08;常见规格为边长不超过 5cm&#xff09…

计算机无法连接无线信号,win7系统连接无线信号时提示Windows无法连接到路由器名称的四种解决方法...

现如今网络发展速度非常快&#xff0c;无线网络已经普及了&#xff0c;使用率高了遇到的问题也就多了。比如有时候笔记本win7系统连接无线信号时出现“Windows无法连接到路由器名称”(如下图所示)&#xff0c;该如何解决此问题呢&#xff1f;下面脚本之家的小编介绍几种解决方法…

数据采集与清洗基础习题(四)Pandas初体验,头歌参考答案

数据采集习题参考答案&#xff0c;会持续更新&#xff0c;点个关注防丢失。 创作不易&#xff0c;一键三连给博主一个支持呗。 为了方便查找&#xff0c;已按照头歌重新排版&#xff0c;朋友们按照头歌所属门类查找实训哦&#xff0c;该篇为Pandas。 文章目录 实训一&#…

全国计算机准考证打印2015年,甘肃2015下半年全国计算机等级考试准考证打印时间...

甘肃2015下半年全国计算机等级考试准考证打印时间一、打印准考证考生可在考前2周之内登陆全省统一报名网站自主打印准考证&#xff0c;或到考点现场领取准考证。二、考试时间下半年&#xff1a;2015年9月19日至21日&#xff0c;分批进行。考试具体时间、地点均以“准考证”为准…

TOPSIS与模糊Borda 的组合应用(以第二届大湾区杯和国赛为案例)

目录 一、TOPSIS&#xff08;优劣解距离法&#xff09;简介 二、TOPSIS&#xff08;优劣解距离法&#xff09;主要步骤 &#xff08;1&#xff09;数据进行标准化 &#xff08;2&#xff09;构建决策矩阵 &#xff08;3&#xff09;构造加权规范阵 &#xff08;4&#xf…

Spring Boot 页面国际化

internationalization详解 国际化&#xff08;internationalization&#xff09;是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言&#xff0c;国家/地区和文化相关的元素。换言之&#xff0c;应用程序的功能和代码设计考虑在不同地区运行的…

唯美计算机语言,唯美精辟的语句

1、当泪水一滴滴的掉落在我的手上&#xff0c;那时竟想为何我非你不可&#xff01;2、原来再美好的承诺&#xff0c;最终还是会被现实打败。3、明明不是陌生人&#xff0c;却装的&#xff0c;比陌生人&#xff0c;还要陌生。4、如果我是个瘦子&#xff0c;伤心时我还可以数数排…

不到30的成本,还不赶紧造起来——盘点软著申请小知识

今年上半年的时候跟着老师做项目&#xff0c;为了学习应付中期报告&#xff0c;就自己写了一个小软件&#xff0c;然后申请了一个软著&#xff0c;至于为啥要头铁的自己上呢&#xff0c;因为想要拿独立著作权&#xff0c;那当然是没有报销的啦~&#xff0c;这里有同学就要问啦&…

Linux系统安装及配置——Centos-7-X86_64-DVD-2009

目录 1.下载 VMware Workstation软件 2.下载 Centos-7-X86_64-DVD-2009.iso 3.安装并配置 3.1打开VMware Workstation&#xff0c;选择创建新的虚拟机 3.2选择自定义&#xff0c;然后下一步 3.3下一步 3.4选择稍后安装操作系统&#xff0c;然后下一步 3.5选择Linux&am…

2018年12月份计算机,CPU天梯图2018年12月最新版 十二月台式电脑CPU性能排行

Helio&#xff0c;大家好&#xff0c;11月再见12月你好&#xff01;欢迎关注IT数码通带来的最新一期桌面CPU天梯图。距离上一次天梯图更新已经过去一个月时间了&#xff0c;伴随着12月份到来&#xff0c;新的天梯图需要进行更新和完善了。接下来“IT数码通”小编为大家带来了CP…

C语言程序的错误和警告

一段C语言代码&#xff0c;在编译、链接和运行的各个阶段都可能会出现问题。编译器只能检查编译和链接阶段出现的问题&#xff0c;而可执行程序已经脱离了编译器&#xff0c;运行阶段出现问题编译器是无能为力的。 如果我们编写的代码正确&#xff0c;运行时会提示没有错误&am…

计算机的集成显卡是什么意思,IGD、PEG、PCI的含义,我的电脑是集成显卡该选哪一项...

请详细介绍IGD&#xff0c;PEG&#xff0c;PCI的含义&#xff0c;我应该为计算机的集成显卡选择其中的一种。 ...请详细说明IGD&#xff0c;PEG&#xff0c;PCI的含义&#xff0c;如果我的计算机是集成显卡&#xff0c;则应该选择IGD&#xff0c;PEG&#xff0c;PCI的含义。展开…

Spring Boot 数据国际化

internationalization详解 国际化&#xff08;internationalization&#xff09;是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言&#xff0c;国家/地区和文化相关的元素。换言之&#xff0c;应用程序的功能和代码设计考虑在不同地区运行的…

没有bug队——加贝——Python 练习实例 21,22

21.题目&#xff1a; 猴子吃桃问题&#xff1a;猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不瘾&#xff0c;又多吃了一个第二天早上又将剩下的桃子吃掉一半&#xff0c;又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时&…

没有bug队——加贝——Python 练习实例 23,24

23.题目&#xff1a;打印菱形 程序分析&#xff1a;先把图形分成两部分来看待&#xff0c;前四行一个规律&#xff0c;后三行一个规律&#xff0c;利用双重for循环&#xff0c;第一层控制行&#xff0c;第二层控制列。 注&#xff1a;将这个图形看成对称的&#xff0c;前面和后…

Spring Boot 之 itext导出pdf下载

Java操作pdf框架详解 itext是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本&#xff0c;表格&#xff0c;图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。 下载效果演示 po…

从您的计算机移除此产品,解决office提示“此操作只对目前安装的产品有效”的方法...

Office软件是我们所有微软系统预装版本中都会有的一个组件&#xff0c;有的用户在购买电脑之后由于不想使用这个软件等种种原因会选择将这个软件从电脑中卸载。卸载的方法有很多&#xff0c;我们常用的方法就是使用电脑中自带的卸载软件卸载这个程序&#xff0c;还有一种就是使…

没有bug队——加贝——Python 练习实例 25,26

我非常认真的告诉大家今天这是一篇水文&#xff0c;别看了 25.题目&#xff1a; 求12!3!...20!的和。 程序分析&#xff1a;此程序只是把累加变成了累乘。 s 0 l range(1,21) def op(x):r 1for i in range(1,x 1):r * ireturn r s sum(map(op,l)) print (1! 2! 3! …