Spring Boot 菜鸟教程 11 html页面解析-jsoup

需求

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

html解析器

jsoup

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

htmlparser

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

比较一下

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

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

Spring Boot 菜鸟教程 11 html页面解析-jsoup_第1张图片
这里写图片描述

项目图片

Spring Boot 菜鸟教程 11 html页面解析-jsoup_第2张图片
这里写图片描述

pom.xml


    org.jsoup
    jsoup
    1.10.1

操作流程

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

    
        
            
            
            
                
                
            
        
        
            
                
                
            
            Hibernate
        
    
    
        
            
                
                
                
                
                
                
                
                
                
            
        
        
            
                
                
                
                
                
                
                
                
                
            
            你还在为不知道怎样正确使用Hibernate而纠结吗
        
        
            
                
                
                
                
                
                
                
                
                
                
            
            ,
        
        
            
                
                
                
                
                
                
                
                
                
            
            你还在为不知道怎样配置映射文件而郁闷吗
        
    
    
        
            
            
                
            
        
        
            
                
            
            Hibernate 系列教
        
        
        
        
            
                
            
            程1-枚举单例类
        
    
    
        
            
                
                
            
        
        
            
                
            
            
        
        
            
                
            
             HYPERLINK "http://blog.csdn.net/je_ge/article/details/53234944" 
        
        
            
                
            
            
        
        
            
                
                
            
            http://blog.csdn.net/je_ge/article/details/53234944
        
        
            
                
            
            
        
    
    
        
        
        
        
    

  • 现在ftl文件修改地方

    
        
            
            
            
                
                
            
        
        
            
                
                
            
            ${title}
        
    
    
        
            
                
                
                
                
                
                
                
                
                
            
        
        
            
                
                
                
                
                
                
                
                
                
            
            ${content}
        
    
    <#list list as map> 
    
        
            
            
                
            
        
        
            
                
            
            ${map.title}
        
    
    
        
            
                
                
            
        
        
            
                
            
            
        
        
            
                
            
             HYPERLINK "${map.title}" 
        
        
            
                
            
            
        
        
            
                
                
            
            ${map.href}
        
        
            
                
            
            
        
    
    
    
        
        
        
        
    

测试类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 [email protected]
 * @description:获取连接,写出doc文件
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest()
public class JsoupTest {
  // 读取博客信息的地址
  private final static String URL_ADDRESS = "http://blog.csdn.net/je_ge?viewmode=contents";

  // 

// // Spring Boot 系列教程9-swagger-前后端分离后的标准 // //

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> list = new ArrayList>(); for (Element link : links) { String linkText = link.text(); if (linkText.contains(title)) { Map map = new HashMap(); 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 root = new HashMap(); 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

如果觉得我的文章或者代码对您有帮助,可以请我喝杯咖啡。
**您的支持将鼓励我继续创作!谢谢! **

Spring Boot 菜鸟教程 11 html页面解析-jsoup_第3张图片
微信打赏

Spring Boot 菜鸟教程 11 html页面解析-jsoup_第4张图片
支付宝打赏

你可能感兴趣的:(Spring Boot 菜鸟教程 11 html页面解析-jsoup)