java 使用 jsoup解析html

Jsoup介绍

简介

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

Jsoup的主要功能

  1. 从一个URL,文件或字符串中解析HTML
  2. 使用DOM或CSS选择器来查找、取出数据
  3. 可操作HTML元素、属性、文本
  4. 注意:jsoup是基于MIT协议发布的,可放心使用于商业项目。

引入Jsoup

     <dependency>
            <!-- jsoup HTML parser library @ https://jsoup.org/ -->
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.14.2</version>
     </dependency>

api文档

jsoup官网

使用jsoup

package com.chenhong;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.nodes.TextNode;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class JsoupTest {
    public static void main(String[] args) throws Exception {
        //String fileName = "C:/Users/11826/Desktop/法律数据库/法律全文/法律全文-原版html/290592.html";
        String fileName = "C:/Users/11826/Desktop/法律数据库/法律全文/法律全文-原版html/161431.html";


        //通过文件获取Document对象
        File file = new File(fileName);
        Document parse = Jsoup.parse(file, "UTF-8");
        InputStream fileInputStream = new FileInputStream(file);
        //通过input流获取Document对象,baseUri
        Document streamParse = Jsoup.parse(fileInputStream,"UTF-8","");
        //通过字符串获取Document对象
        Document strParse = Jsoup.parse("<html></body><span class=\"c_tiao\">  第一百零一条</span> </body> </html>");
        
        Element head = parse.head();
        Element body = parse.body();
        //通过class 获取元素列表
        Elements fulltext = body.getElementsByClass("fulltext");
        for (Element element : fulltext) {
            List<String> textList = new ArrayList<>();
            //对每个元素进行处理
            getTextNode(element, textList);

        }
    }
    private static void getTextNode(Element el, List<String> strList) {
        //获取当前元素所有子节点
        List<Node> nodes = el.childNodes();
        for (Node node : nodes) {
            //由于我的业务时获取所有text,并且不能打乱层级,所以通过递归的方式获取所有text
            if (node instanceof Element) {
                //如果子元素为 Element 则一直递归 ,直到元素为TextNode
                getTextNode((Element) node, strList);
                continue;
            }
            if (node instanceof TextNode) {
                //取出text
                TextNode textNode = (TextNode) node;
                String nodeText = textNode.text();
                String text = replaceFirst(nodeText);
                boolean equals = text.equals("");
                if (!equals) {
                    strList.add(text);
                    System.out.println(text);
                }
            }
        }
    }

    private static String replaceFirst(String str) {
        return str.replaceFirst("[\\u00a0*|\\t*| *| *| *|//s*]*", "");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值