Jsoup

简介

  jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。

添加依赖

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

查找DOM元素

  使用Jsoup提供的API,可以通过标签名,Id,Class样式等来搜索DOM

  常用API

getElementById(String id)  // 根据id来查询DOM

getElementsByTag(String tagName)  // 根据tag名称来查询DOM

getElementsByClass(String className)  // 根据样式名称来查询DOM

getElementsByAttribute(String key)  // 根据属性名来查询DOM

getElementsByAttributeValue(String key,String value)  // 根据属性名和属性值来查询DOM

  实例代码

package cn.cslg.Jsoup;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
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;

public class JsoupDemo {

    public static void main(String[] args)throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httpclient实例
        HttpGet httpget = new HttpGet("http://www.cnblogs.com/"); // 创建httpget实例

        CloseableHttpResponse response = httpclient.execute(httpget); // 执行get请求
        HttpEntity entity=response.getEntity(); // 获取返回实体
        String content=EntityUtils.toString(entity, "utf-8");
        response.close(); // 关闭流和释放系统资源

        Document doc=Jsoup.parse(content);// 解析网页 得到文档对象

        Element navTopElement=doc.getElementById("site_nav_top"); // 根据id来查询DOM
        String navTop=navTopElement.text(); // 返回元素的文本
        System.out.println("口号:"+navTop);

        Elements titleElements=doc.getElementsByTag("title"); // 根据tag名称来查询DOM
        Element titleElement=titleElements.get(0); // 获取第1个元素
        String title=titleElement.text(); // 返回元素的文本
        System.out.println("网页标题是:"+title);

        Elements postItemElements=doc.getElementsByClass("post_item "); // 根据样式名称来查询DOM
        for(Element e:postItemElements){
            System.out.println(e.html());
            System.out.println("================");
        }

        Elements widthElements=doc.getElementsByAttribute("width"); // 根据属性名来查询DOM
        for(Element e:widthElements){
            System.out.println(e.toString());
            System.out.println("================");
        }

        System.out.println("target-_blank");
        Elements targetElements=doc.getElementsByAttributeValue("target", "_blank");  // 根据属性名和属性值来查询DOM
        for(Element e:targetElements){
            System.out.println(e.toString());
            System.out.println("================");
        }

    }

}

使用选择器查找DOM元素

  对于很多个有规律的标签层次,可以使用Jsoup使用选择器语法查找DOM元素

  在选择器语法中一般为 "#id名 .class名 .class名 标签 标签"

  实例代码

package cn.cslg.Jsoup;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
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;

public class JsoupDemo {

    public static void main(String[] args)throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httpclient实例
        HttpGet httpget = new HttpGet("http://www.cnblogs.com/"); // 创建httpget实例

        CloseableHttpResponse response = httpclient.execute(httpget); // 执行get请求
        HttpEntity entity=response.getEntity(); // 获取返回实体
        String content=EntityUtils.toString(entity, "utf-8");
        response.close(); // 关闭流和释放系统资源

        Document doc=Jsoup.parse(content); // 解析网页 得到文档对象

        Elements linkElements=doc.select("#post_list .post_item .post_item_body h3 a"); //通过选择器查找所有博客链接DOM
        for(Element e:linkElements){
            System.out.println("博客标题:"+e.text());
        }

        System.out.println("===============");
        Elements hrefElements=doc.select("a[href]"); // 带有href属性的a元素
        for(Element e:hrefElements){
            System.out.println(e.toString());
        }

        System.out.println("===============");
        Elements imgElements=doc.select("img[src$=.png]"); // 查找扩展名为.png的图片DOM节点
        for(Element e:imgElements){
            System.out.println(e.toString());
        }

        Element element=doc.getElementsByTag("title").first(); // 获取tag是title的第一个DOM元素
        String title=element.text(); // 返回元素的文本
        System.out.println("网页标题是:"+title);

    }
}

获取DOM属性值

  例如获取href的属性值

package cn.cslg.Jsoup;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
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;

public class JsoupDemo {

    public static void main(String[] args)throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httpclient实例
        HttpGet httpget = new HttpGet("http://www.cnblogs.com/"); // 创建httpget实例

        CloseableHttpResponse response = httpclient.execute(httpget); // 执行get请求
        HttpEntity entity=response.getEntity(); // 获取返回实体
        String content=EntityUtils.toString(entity, "utf-8");
        response.close(); // 关闭流和释放系统资源

        Document doc=Jsoup.parse(content); // 解析网页 得到文档对象

        Elements linkElements=doc.select("#post_list .post_item .post_item_body h3 a"); //通过选择器查找所有博客链接DOM
        for(Element e:linkElements){
            System.out.println("博客标题:"+e.text());
            System.out.println("博客地址:"+e.attr("href"));
            System.out.println("target:"+e.attr("target"));
        }

        Element linkElement=doc.select("#friend_link").first();
        System.out.println("纯文本:"+linkElement.text()); // 获取纯文本
        System.out.println("html:"+linkElement.html()); // 获取整个html

    }
}

时间: 2024-08-05 09:44:33

Jsoup的相关文章

atitit. java jsoup html table的读取解析 总结

atitit. java jsoup html table的读取解析 总结 1. 两个大的parser ,,,jsoup 跟个   htmlparser 1 2. 资料比较 1 3. jsoup越佳.. 1 4. 解析并提取 HTML 元素的模式( 选择器 and  DOM 方式 ) 2 5. html修改 2 6. 跟个htmlparse的比较 2 7. jsoup的用处 3 7.1. html解析 3 7.2. html修改 3 7.3. HTML 文档清理 3 8. code--读取解析表

通过使用jsoup解析html,绘画表格生成execl文件

1.获取文件或者字符设置绘画表格字符编码 //得到Document并且设置编码格式 public static Document getDoc(String fileName) throws IOException{ File myFile=new File(fileName); Document doc= Jsoup.parse(myFile, "UTF-8",""); return doc; } 2.根据解析出来的table进行绘画 public static

jsoup获取网页属性

package com.open1111.jsoup; import org.apache.http.HttpEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl

Jsoup代码解读之六-防御XSS攻击

Jsoup代码解读之八-防御XSS攻击 防御XSS攻击的一般原理 cleaner是Jsoup的重要功能之一,我们常用它来进行富文本输入中的XSS防御. 我们知道,XSS攻击的一般方式是,通过在页面输入中嵌入一段恶意脚本,对输出时的DOM结构进行修改,从而达到执行这段脚本的目的.对于纯文本输入,过滤/转义HTML特殊字符<,>,",'是行之有效的办法,但是如果本身用户输入的就是一段HTML文本(例如博客文章),这种方式就不太有效了.这个时候,就是Jsoup大显身手的时候了. 在前面,我

jsoup实现登录功能

public static void main(String[] args) throws IOException { Connection.Response res = Jsoup.connect("http://***.com/authorize") .data("u", "[email protected]", "pwd", "****","k","y",&qu

httpclient3+jsoup获取正方教务系统课表

运用httpclient3+jsoup获取正方教务系统课表 import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Scanner; i

jsoup 简介

Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从HTML中攫取你所需的信息 和扩展 HTMLParser 对自定义标签的处理能力.但现在我已经不再使用 htmlparser 了,原因是 htmlparser 很少更新,但最重要的是有了 jsoup . jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的AP

网页解析Jsoup简单使用

public static void main(String[] args) throws IOException { //System.out.println("Hello World!"); /** * 获取 */ File file = new File("/Users/apple/Desktop/temp.html"); /** * 将网页转化成dom文件 */ Document docs = Jsoup.parse(file, "utf-8&qu

利用jsoup解析个人信息----图书馆客户端

上一篇HTTPclient模拟登陆交大图书馆解决了登陆,登陆之后便可以查看个人信息.个人信息条目较少,如图: 主要就是:姓名.电话.目前借书.积欠金额. 查看其html代码: 下面开始进行解析: 代码 package com.ali.login.spider; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import com.ali.login.bean.Us

Jsoup简介——使用Java抓取网页数据

概述 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据.jsoup的主要功能如下: 1. 从一个URL,文件或字符串中解析HTML: 2. 使用DOM或CSS选择器来查找.取出数据: 3. 可操作HTML元素.属性.文本: jsoup是基于MIT协议发布的,可放心使用于商业项目. 关于Jsoul的更多介绍,请访问Jsoul的官网:http://jsoup.o