美文网首页
Java爬虫之Jsoup 基础语法

Java爬虫之Jsoup 基础语法

作者: HAO延WEI | 来源:发表于2019-12-14 14:09 被阅读0次

Jsoup介绍:

Jsoup 是一个 Java 的开源HTML解析器,可直接解析某个URL地址、HTML文本内容。
官方文档:https://www.open-open.com/jsoup/parsing-a-document.htm

Jsoup主要有以下功能:

  1. 从一个URL,文件或字符串中解析HTML
  2. 使用DOM或CSS选择器来查找、取出数据
  3. 对HTML元素、属性、文本进行操作
  4. 清除不受信任的HTML (来防止XSS攻击)

maven项目里pom添加jsoup依赖

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

Jsoup 基础语法

1. 获得Document

本地html文件或者使用javaIO流,则使用静态方法parse方法

 Document document = Jsoup.parse("D:\\test.html");

网址的话使用静态方法connect().get()

 Document document = Jsoup.connect("https://www.baidu.com").get();

2. 根据id找到某标签 document.getElementById

因为id是唯一的,所以找到唯一的一个Element

    Element element = document.getElementById("id名");

3. 根据class找到某标签 document.getElementsByClass

class可能不止一个,所以这里返回的是一个Elemnts数组

Elements elements = document.getElementsByClass("d_title").select("h1");

4. 获得标签的内容 element.text()

例如html文件中有段代码为

<a id="title">hello world</a>
//获得a标签的内容的代码为
Element element = document.getElementById("title");
String s = element.text();

5. 获得标签的属性 element.attr()

有段代码如下:

<a id="main" href="www.baidu.com"></a>
//获得a标签的链接地址

Element element = document.getElementById("main");
String url = element.attr
String s = element.text();

6. 选择固定标签(li,p,a等)element.select("a")

返回的是Elements数组

//例如html文件中有段代码为
<div id="main"><a>hello world!</a></div>

//获得a标签的内容代码为
Element element = document.getElementById("main");
Elements elements = element.select("a");
for(int i=0;i<elements.size();i++){
    String s = elements.get(i).text();
}

7. 获取p标签不能换行,有段代码

<div id="main">
    <p>hello world</p>
    <p>this is my name</p>
</div>  

"""
我们由id找到了element,我们想要获得p标签的内容,怎么办呢?
刚开始我想的也是使用select方法来选择p标签,但是,没有其作用正确的方法应该是使用element.text方法获得内容,但是获得的内容全是一行的(段落之间    是用空格隔开的)我们想要每个p标签的内容独占一行,怎么办呢?我们直接把空格替换成\n即可
"""
String string = element.text().replaceAll(" ","\n");

"""
另外一种方法,如果感觉上面的方法不好用的话(有些小说原本就有些多余的空格),那么就使用下面的方法
"""

Element element = document.getElementById("main");
String text = Jsoup.clean(element.html(), "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));

"""
保存p标签换行,上面的获得的内容还有&nbsp标志(html的空格标志),我们还得删除这个标志以及多余的空行
"""

    /**
     * 处理空行和“&nbsp;”标志
     * @param input 内容
     * @return 处理过后的结果
     */
    public static String deleteCRLFOnce(String input) {
        return input.replaceAll("((\r\n)|\n)[\\s\t ]*(\\1)+", "$1").replaceAll("&nbsp;", "");
    }

相关文章

网友评论

      本文标题:Java爬虫之Jsoup 基础语法

      本文链接:https://www.haomeiwen.com/subject/phcbkqtx.html