Jsoup方法

1.通过Jsoup来解析xml的步骤
1.导入jar包
2.获取Document对象
3.获取对应的标签Element对象
4.获取数据

代码如下:
Demo1.java

package main.java;

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

import java.io.File;
import java.io.IOException;
import java.net.URL;

/**
 * Jsoup快速入门
 */
public class Demo1 {
    public static void main(String[] args) throws IOException {
        //2.获取Document对象,根据xml文档获取
        //2.1获取student.xml的path
        String path = Demo1.class.getClassLoader().getResource("student.xml").getPath();
        //2.2解析xml文档,加载文档进内存,获取dom树--->Document
        Document document = Jsoup.parse(new File(path), "utf-8");
        //3.获取元素对象 Element
        Elements elements = document.getElementsByTag("name");

        System.out.println(elements.size());
        //3.1获取第一个name的Element对象
        Element element = elements.get(0);
        //3.2获取数据
        String name = element.text();
        System.out.println(name);
    }

}

student.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "student.dtd">

<!--<!DOCTYPE students [

		<!ELEMENT students (student+) >
		<!ELEMENT student (name,age,sex)>
		<!ELEMENT name (#PCDATA)>
		<!ELEMENT age (#PCDATA)>
		<!ELEMENT sex (#PCDATA)>
		<!ATTLIST student number ID #REQUIRED>


		]>-->
<students>

    <student number="s001">
        <name>zhangsan</name>
        <age>abc</age>
        <sex>hehe</sex>
    </student>

    <student number="s002">
        <name>lisi</name>
        <age>24</age>
        <sex>female</sex>
    </student>

</students>

效果:
在这里插入图片描述
总结:
解析的具体步骤在代码上方都有注释,可以看到xml中第二个name的值被打印出来。来说一下在操作中遇到的困难(本人使用的时Idea):首先要把所有的文件夹名称都改为英语(因为这里的编码方式是UTF-8,有中文会出现乱码)。其次需要注意一下这里的文件结构,如图所示:
在这里插入图片描述
resources文件夹放置需要解析的文件,java文件放置解析的具体步骤(注意这里的文件夹的类型都是不一样的需要格外注意)。resources和java文件都需要放在src文件夹之中。

2.归纳Jsoup的方法
在上述代码中

Document document = Jsoup.parse(new File(path), “utf-8”);

这句话是来获取Document对象的(也就是获取DOM树), 获取过程中用到了Jsoup.parse方法。
Jsoup.parse方法有很多重载下面我来介绍以下其中的三种:

1.*parse(File in,String charsetName):解析xml或html文件的。
这种方法就是上述代码种用到的方法,第一个参数为文件,第二个参数是需要解析的文件所使用的编码方式。

2.parse(String html):解析xml或html字符串
这种方式需要传入字符串内容,也就是把解析文件所有的内容都当作字符串传入进去。

代码如下:

package main.java;

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

import java.io.File;
import java.io.IOException;
import java.net.URL;

/**
 * Jsoup对象功能
 */
public class Demo2 {
    public static void main(String[] args) throws IOException {
        //2.1获取student.xml的path
        String path = Demo2.class.getClassLoader().getResource("student.xml").getPath();

//        2.parse(String html):解析xml或html字符串
        String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
                "<students>\n" +
                "\n" +
                "    <student number=\"s001\">\n" +
                "        <name>zhangsan</name>\n" +
                "        <age>abc</age>\n" +
                "        <sex>hehe</sex>\n" +
                "    </student>\n" +
                "\n" +
                "    <student number=\"s002\">\n" +
                "        <name>lisi</name>\n" +
                "        <age>24</age>\n" +
                "        <sex>female</sex>\n" +
                "    </student>\n" +
                "\n" +
                "</students>";
        Document document = Jsoup.parse(str);
        System.out.println(document);
    }

}

效果如下:

<!--?xml version="1.0" encoding="UTF-8" ?-->
<html>
 <head></head>
 <body>
  <students> 
   <student number="s001"> 
    <name>
     zhangsan
    </name> 
    <age>
     abc
    </age> 
    <sex>
     hehe
    </sex> 
   </student> 
   <student number="s002"> 
    <name>
     lisi
    </name> 
    <age>
     24
    </age> 
    <sex>
     female
    </sex> 
   </student> 
  </students>
 </body>
</html>

可以看到xml文件种的所有内容又被打印出来,可以证实Document确实获得了DOM树。

3.parse(URL url,int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
这种方式传入的第一个参数是具体网站的链接,第二个参数是延迟的时间。

代码如下:

package main.java;

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

import java.io.File;
import java.io.IOException;
import java.net.URL;

/**
 * Jsoup对象功能
 */
public class Demo2 {
    public static void main(String[] args) throws IOException {
        //2.1获取student.xml的path
        URL url = new URL("https://www.baidu.com/"); //代表网络中的资源路径
        Document document = Jsoup.parse(url,10000);
        System.out.println(document);
    }
}

效果太长了,简单来说就是https://www.baidu.com这个页面的的代码(在该页面种按F12可以看到)。这种方法在日后可以用来做网站爬虫。

发布了263 篇原创文章 · 获赞 23 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41998938/article/details/98376433