Jsoup介绍

一.Jsoup简介:

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

在爬虫采集网页领域主要作用是HttpClient获取到网页后具体的网页提取需要的信息的时候,就用到JsoupJsoup可以使用强大的类似Jquery,css选择器,来获取需要的数据。

二.HelloWorld

需要的包:首先需要用到httpClient的包

Jsoup介绍_第1张图片

package com.wdy.jsoup;

 

import java.io.IOException;

import org.apache.http.HttpEntity;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.util.EntityUtils;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

import com.wdy.httpclient.HttpClientUtils;

 

public class HelloWorld {

   

    public static void main(String[] args) throws ClientProtocolException, IOException {

       HttpEntity httpEntityByProxyIp = HttpClientUtils.getHttpEntity("http://www.cnblogs.com/");

       String content = EntityUtils.toString(httpEntityByProxyIp, "utf-8");

       Document document = Jsoup.parse(content);//解析html返回doc对象

       //根据标签获取内容

//public class org.jsoup.select.Elements extends java.util.ArrayList {}

       Elements elementsByTag = document.getElementsByTag("title");//获取所有title标签

       Element element = elementsByTag.get(0);//获取第0title标签

       String text = element.text();//返回元素的文本

       System.out.println("网页标题为:"+text);

      

       //根据id获取内容

       Element elementById = document.getElementById("site_nav_top");

       String text2 = elementById.text();

       System.out.println("网页口号为:"+text2);

       HttpClientUtils.closeHttpClient();

    }

   

}

 

三.Jsoup查找DOM元素

在获取了Document对象后:document对象可以获取DOM元素。

HttpEntity httpEntityByProxyIp = HttpClientUtils.getHttpEntity("http://www.cnblogs.com/");

       String content = EntityUtils.toString(httpEntityByProxyIp, "utf-8");

       Document document = Jsoup.parse(content);//解析html返回doc对象

 

其实类似jquary的获取DOM元素的方法。

方法

说明

举例

getElementById(id)

根据id获取DOM

Element elementById = document.getElementById("site_nav_top");

getElementsByTag(tagName)

根据标签名获取DOM

Elements elementsByTag = document.getElementsByTag("title")

getElementsByClass(className)

 

根据类名获取DOM

Elements elementsByClass = document.getElementsByClass("right_more")

getElementsByAttribute(key)

根据属性获取DOM

Elements elementsByAttribute = document.getElementsByAttribute("style")

getElementsByAttributeValue(key, value)

根据属性以及对应值获取DOM

Elements elementsByAttributeValue = document.getElementsByAttributeValue("target", "_blank")

其他不常用

 

 

 

 

四.Jsoup使用选择器查找DOM元素

       Elements select = document.select("#footer .footer_block #friend_link a");

       for (Element e : select) {

           System.out.println("获取本标签的全部信息: "+e.toString());

           System.out.println("获取本标签内包围的文本信息:"+e.text());

           // 获取本标签内包含的所有html信息,包括文本和内嵌的html标签

           System.out.println("获取本标签内包含的所有html信息: "+e.html());

       }

 

       Elements select = document.select("a[href]");//获取所有带href属性的a标签

       for (Element e : select) {

           System.out.println("获取本标签的全部信息: " + e.toString());

       }

 

//获取所有扩展名为.pngimg标签

       Elements imgElements = document.select("img[src$=.png]");

       for (Element e : imgElements) {

           System.out.println("获取本标签的全部信息: " + e.toString());

       }

        // first()、last()等的用法

       Element imgElement = document.select("img[src$=.png]").first();

      

 

 

 

五.Jsoup获取DOM元素的属性值

       /**

        * 使用elementattr()方法获取属性值:

        *     获取所有超链接的网址

        */

       Elements select = document.select("a[href]");//获取所有带href属性的a标签

       for (Element e : select) {

           System.out.println("###"+e.attr("href"));

       }

结果:

###https://www.cnblogs.com/

###https://home.cnblogs.com/

###https://news.cnblogs.com

###https://q.cnblogs.com/

###https://ing.cnblogs.com/

###https://group.cnblogs.com/

…………

 

你可能感兴趣的:(Java)