Spring Boot 菜鸟教程 11 html页面解析-jsoup
来源:互联网 发布:推广软件拦截 编辑:程序博客网 时间:2024/04/30 01:53
GitHub
需求
- 需要对一个页面进行数据抓取,并导出doc文档
html解析器
jsoup
- 可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。
htmlparser
- 提供了线性和嵌套两种方式来解析网页,主要用于 html 网页的转换(Transformation) 以及网页内容的抽取 (Extraction)。
比较一下
- 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 "http://blog.csdn.net/je_ge/article/details/53234944" </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 "${map.title}" </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;/** * @author JE哥 * @email 1272434821@qq.com * @description:获取连接,写出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"> // Spring Boot 系列教程9-swagger-前后端分离后的标准 // </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"); } @Test public 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()); } @Autowired private FreeMarkerConfigurer freeMarkerConfigurer; @Test public 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"))); }}
其他关联代码
- Spring Boot 菜鸟教程 10 freemarker导出word下载
http://blog.csdn.net/je_ge/article/details/53410364
源码地址
https://github.com/je-ge/spring-boot
如果觉得我的文章或者代码对您有帮助,可以请我喝杯咖啡。
您的支持将鼓励我继续创作!谢谢!
0 0
- Spring Boot 菜鸟教程 11 html页面解析-jsoup
- Spring Boot 菜鸟教程 15 页面国际化
- Jsoup解析Html教程
- Jsoup解析Html教程
- Jsoup解析Html教程
- Jsoup解析Html教程
- 使用Jsoup解析HTML页面
- 使用Jsoup解析HTML页面
- 使用jsoup解析html页面
- 使用Jsoup解析HTML页面
- spring boot + html 页面
- Android 使用Jsoup解析HTML页面
- java-jsoup解析html页面的内容
- Android使用Jsoup解析HTML页面
- java-jsoup解析html页面的内容
- Android开发--使用JSOUP解析HTML页面
- HTML页面解析组件-Jsoup使用
- android用jsoup解析html详细教程
- Hadoop学习体系
- 剑指Offer——毕业生求职网站汇总(干货)
- Servlet笔记
- PMP--项目整合管理(二)
- 几步教你怎么写MVP
- Spring Boot 菜鸟教程 11 html页面解析-jsoup
- 设置网页标题图片
- NuttX的学习笔记 8
- 海量字符串中查找重复数
- 你应该知道的一些Android ADB 命令
- 上传本地图片到数据库
- Python多进程、多线程、协程学习小结
- 126. Word Ladder II[hard]
- Zookeeper——1、Zookeeper基本概念