文档章节

Jsoup学习之Jsoup类

Jenly
 Jenly
发布于 2016/09/18 15:37
字数 2299
阅读 54
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

Jsoup类

一、类结构

java.lang.Object

  org.jsoup.Jsoup


public classJsoup    

     extends

     Object

Jsoup类来自于org.jsoup.Jsoup包,并且继承自Object类。

二、方法

Method Summary

static String

clean(String bodyHtml, String baseUri, Whitelist whitelist) 
使用Whitelist对输入的Html文档过滤,只允许特定的标签或者属性,防止恶意代码。

static String

clean(String bodyHtml, String baseUri, Whitelist whitelist, Document.OutputSettings outputSettings) 
使用Whitelist对输入的Html文档过滤,只允许特定的标签或者属性,防止恶意代码。

static String

clean(String bodyHtml, Whitelist whitelist) 
使用Whitelist对输入的Html文档过滤,只允许特定的标签或者属性,防止恶意代码。

static Connection

connect(String url) 
创建URL连接

static boolean

isValid(String bodyHtml, Whitelist whitelist) 
判断输入的Html文档是否符合Whitelist过滤条件的要求

static Document

parse(File in, String charsetName) 
解析文件的内容,生成Html

static Document

parse(File in, String charsetName, String baseUri) 
解析文件的内容,生成Html  

static Document

parse(InputStream in, String charsetName, String baseUri) 
读取输入流,解析成Document

static Document

parse(InputStream in, String charsetName, String baseUri, Parser parser) 

读取输入流,解析成Document

static Document

parse(String html) 
将字符串解析成Html文档

static Document

parse(String html, String baseUri) 
将字符串解析成Html文档

static Document

parse(String html, String baseUri, Parser parser) 
利用提供的Parser,将字符串解析成Html文档

static Document

parse(URL url, int timeoutMillis) 
通过URL,解析成Document

static Document

parseBodyFragment(String bodyHtml) 
Html片段解析成body格式          

static Document

parseBodyFragment(String bodyHtml, String baseUri) 
Html片段解析成body格式 

三、方法详解

clean

public static String clean(String bodyHtml,
                           String baseUri,
                           Whitelist whitelist)

使用Whitelist对输入的Html文档过滤,只允许特定的标签或者属性,防止恶意代码。

参数:

bodyHtml 不安全的html片段

baseUri html中相对路径转换为绝对路径的URL

whitelist 白名单允许的html标签和属性

返回值:

安全的html片段

解析:

这个函数按照whitelist提供的过滤规则对html进行过滤,只保留whitelist允许的标签和属性。Html文档中往往会有很多的连接、图片、引用的外部脚本、css文件等,可能会是相对路径,jsoup会利用baseUri这个参数,自动为这些相对路径加前缀变成绝对路径。例如:<a href=”/photo/2.jpg”>图片</a>会变成

<a href=”http://www.baidu.com/photo/2.jpg”>图片</a>

实例:

[java]  view plain copy print ?
  1. String html = "<p><ahref='http://www.baidu/' onclick='stealCookies()'> 百度一下,你就知道 </a></p>";  
  2. String doc = Jsoup.clean(html,Whitelist.basic());  
  3. //输出:<p><a href="http://www.baidu/"rel="nofollow"> 百度一下,你就知道 </a></p>  

注:Whitelist包含几种过滤模式:none、basic、simpleText、basicWithImages、relaxed,具体过滤规则请参考:Whitelist类

拓展:

Document.OutputSettings outputSettings)

Document.OutputSettings:文档的输出设置,控制精细打印


connect

public static Connection connect(String url)

创建URL连接

参数:

url 必须为http或者https类型的连接.

返回值:

返回连接。你可以添加data,cookies, headers;设置user-agent, referrer,method

解析:

url建立连接,这个方法只支持httphttps协议,连接的方式可以是get也可以是post,并且可以为连接提供所需要的信息,如datacookiesuserAgentmethod等。

实例:

[java]  view plain copy print ?
  1. Document doc = Jsoup.connect("http://example.com")  
  2. .userAgent("Mozilla").data("name","jsoup").get();  
  3. Document doc = Jsoup.connect("http://example.com")  
  4. .cookie("auth","token").post();  


isValid

public static boolean isValid(String bodyHtml, Whitelist whitelist)

判断输入的Html文档是否符合Whitelist过滤条件的要求。

参数:

bodyHtml 要测试的html

whitelist 测试的过滤规则whitelist

返回值:

如果html中包含的标签和属性都包含在whitelist定义的规则内,即whitelist没有过滤掉bodyhtml中的内容,则返回true,否则返回false

实例:

[java]  view plain copy print ?
  1. String html = "<p><ahref='http://www.baidu/'onclick='stealCookies()'> 百度一下,你就知道 </a></p>";  
  2. System.out.println(Jsoup.isValid(html, Whitelist.basic()));  
  3. //输出false,即Whitelist.basic()对html过滤掉了html中的部分内容,onclick这个属性不属于Whitelist.basic(),被过滤掉。  


parse

public static Document parse(File in,  String charsetName, String baseUri)    throws IOException

解析文件的内容,生成Html

参数:

in – html文件

charsetName 设置文档编码格式。如果存在标签http-equiv,并且将charsetName设置为null,则按照标签http-equiv内规定的编码进行编码。否则为了安全起见,一般设置为UTF-8.

baseUri -html中相对路径转换为绝对路径的URL

返回值:

返回健全的html文档

异常:

IOException 如果文件找不到或者不能读取或者charsetName设置无效,抛出异常。

实例:

[java]  view plain copy print ?
  1. File file = new File("C://baidu.txt");  
  2. Document doc = Jsoup.parse(file,"GBK","http://www.baidu.com");  
拓展:

public static Document parse(File in, String charsetName)  throws IOException


parse

public static Document parse(InputStream in,  String charsetName,String baseUri, Parser parser)    throws IOException

读取输入流,解析成Document。可以提供一个轮流的解析器(parser),例如XML解释器(或者非XML解释器)

参数:

in 输入流。确保解析完成后关闭输入流。

charsetName -设置文档编码格式。如果存在标签http-equiv,并且将charsetName设置为null,则按照标签http-equiv内规定的编码进行编码。否则为了安全起见,一般设置为UTF-8.

baseUri -html中相对路径转换为绝对路径的URL

parser 轮流解析器

返回值:

返回健全的html文档

异常:

IOException -如果文件找不到或者不能读取或者charsetName设置无效,抛出异常。

实例:

[java]  view plain copy print ?
  1. FileInputStream input = new FileInputStream("C://baidu.txt");  
  2. Document doc = Jsoup.parse(input, "GBK""http://www.baidu.com", Parser.htmlParser());  
  3. System.out.println(doc);  
  4. input.close();  
拓展:

public static Document parse(InputStream in, String charsetName,String baseUri)   throws IOException


parse

public static Document parse(String html,  String baseUri,  Parser parser)

Html字符串转换为Document。可以提供一个轮流的解析器(parser),例如XML解释器(或者非XML解释器)

参数:

html – Html字符串

baseUri -html中相对路径转换为绝对路径的URL

parser -轮流解析器

返回值:

返回健全的html文档

解析:

Html字符串解析为Document

实例:

[java]  view plain copy print ?
  1. String html = "<html><head><title>Firstparse</title></head>"  
  2.              + "<body><p>Parsed HTML into adoc.</p></body></html>";  
  3. Document doc = Jsoup.parse(html,"www.baidu.com", Parser.htmlParser());  
  4. System.out.println(doc);  
拓展:

public static Document parse(String html, String baseUri)
public static Document parse(String html)


parse

public static Document parse(URL url,  int timeoutMillis)  throws IOException

连接URL,获取Html转换为Document。通常使用connect函数来代替它,字符编码的设置根据http-equiv,或者自动回落为UTF-8编码。

参数:

url 需要连接的URL(使用GET方法),必须使用http或者https协议。

timeoutMillis 读取超时时间,毫秒级,如果超时会抛出IOException异常。

返回值:

解析后的Html

解析:

这个方法是与connect相兼容的方法,一般都使用connect方法来代替它。

异常:

MalformedURLException 请求的URL使用的协议不是http或者https

HttpStatusException –HTTP返回的状态不是OK

UnsupportedMimeTypeException 响应的MIME类型不被支持

SocketTimeoutException 连接超时

IOException 连接或者读取错误

实例:

[java]  view plain copy print ?
  1. URL url = new URL("http://www.baidu.com");  
  2.        Document doc = Jsoup.parse(url,500);  
  3.      System.out.println(doc);  


parseBodyFragment

public static Document parseBodyFragment(String bodyHtml, String baseUri)

Html片段解析成body格式   

参数:

bodyHtml –Html片段

baseUri -html中相对路径转换为绝对路径的URL

返回值:

返回健全的html文档

实例:

[java]  view plain copy print ?
  1. String html = "<div><p>Loremipsum.</p>";  
  2. Document doc = Jsoup.parseBodyFragment(html);  
  3. System.out.println(doc);  
拓展:

public static Document parseBodyFragment(String bodyHtml)


四、总结

Jsoup类的主要功能实现的是连接URL以及对解析Html。连接URL有两种方式:

public static Connection connect(String url)
public static Document parse(URL url, int timeoutMillis) 

一般是使用connect方法。解析html的方式可以是从文件、输入流、字符串中获得:

public static Documentparse(File in, String charsetName,String baseUri)

public static Document parse(InputStream in,String charsetName,String baseUri)

public static Document parse(String htmlString baseUri, Parser parser)

还可以使用clean方法对html进行过滤,使用isValid方法判断html是否符合过滤规则。

 五、实例

[java]  view plain copy print ?
  1. import java.io.File;    
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;    
  4. import java.net.URL;   
  5. import org.jsoup.Jsoup;    
  6. import org.jsoup.nodes.Document;    
  7. import org.jsoup.nodes.Element;   
  8. import org.jsoup.parser.Parser;  
  9. import org.jsoup.safety.Whitelist;  
  10.   
  11.   
  12. public class Load {  
  13.     private static Document doc;  
  14.     private static String html;  
  15.     private static String url = "http://www.baidu.com";  
  16.     private static String baseUri = "http://www.baidu.com";  
  17.     public static Document getDoc() {  
  18.         return doc;  
  19.     }  
  20.     public static void setDoc(Document doc) {  
  21.         Load.doc = doc;  
  22.     }  
  23.     public static void main(String[] args){           
  24.         try {  
  25.             LoadHtml();  
  26.         } catch (Exception e) {  
  27.             e.printStackTrace();  
  28.         }  
  29.     }    
  30.     /** 
  31.      * 设置代理服务器(ps:单位用的代理上网) 
  32.      */  
  33.     public static void Host(){  
  34.           
  35.         System.getProperties().setProperty("proxySet""true");    
  36.         //用的代理服务器    
  37.         System.getProperties().setProperty("http.proxyHost""192.168.130.15");    
  38.         //代理端口    
  39.         System.getProperties().setProperty("http.proxyPort""8848");  
  40.     }  
  41.     public static void LoadHtml() throws Exception{  
  42.         Host();  
  43.         JsoupClean();  
  44.         JsoupConnect();  
  45.         JsoupIsValid();  
  46.         JsoupParseFile();  
  47.         JsoupParseStream();  
  48.         JsoupParseStr();  
  49.         JsoupURL();  
  50.         JsoupBody();  
  51.     }  
  52.     /** 
  53.      * html过滤 
  54.      */  
  55.     public static void JsoupClean(){  
  56.         html = "<p><a href='http://blog.csdn.net/xyw_eliot' onclick='stealCookies()'> Eliot </a></p>";  
  57.         String doc = Jsoup.clean(html, baseUri, Whitelist.basic());   
  58.         System.out.println(doc);  
  59.     }  
  60.     /** 
  61.      * 连接URL返回Document 
  62.      * @throws IOException 
  63.      */  
  64.     public static void JsoupConnect() throws IOException{  
  65.         doc = Jsoup.connect(url).get();  
  66.         System.out.println(doc);  
  67.     }  
  68.     /** 
  69.      * 判断是否符合过滤规则 
  70.      */  
  71.     public static void JsoupIsValid(){  
  72.         html = "<p><a href='http://www.baidu/'onclick='stealCookies()'> 百度一下,你就知道 </a></p>";  
  73.         System.out.println(Jsoup.isValid(html, Whitelist.basic()));  
  74.     }  
  75.     /** 
  76.      * 解析文件 
  77.      * @throws IOException 
  78.      */  
  79.     public static void JsoupParseFile() throws IOException{  
  80.         File file = new File("C://baidu.txt");  
  81.         doc = Jsoup.parse(file, "GBK", baseUri);  
  82.         System.out.println(doc);  
  83.     }  
  84.     /** 
  85.      * 解析流 
  86.      * @throws Exception 
  87.      */  
  88.     public static void JsoupParseStream() throws Exception{  
  89.         FileInputStream in = new FileInputStream("C://baidu.txt");  
  90.         doc = Jsoup.parse(in, "GBK", baseUri);  
  91.         System.out.println(doc);  
  92.         in.close();  
  93.     }  
  94.     /** 
  95.      * 解析字符串 
  96.      */  
  97.     public static void JsoupParseStr(){  
  98.         html = "<html><head><title>First parse</title></head>"  
  99.               + "<body><p>Parsed HTML into a doc.</p></body></html>";  
  100.         doc = Jsoup.parse(html, baseUri);  
  101.         System.out.println(doc);  
  102.     }  
  103.     /** 
  104.      * 解析URL 
  105.      * @throws Exception 
  106.      */  
  107.     public static void JsoupURL() throws Exception{  
  108.         URL url = new URL("http://www.baidu.com");  
  109.         doc = Jsoup.parse(url, 500);  
  110.         System.out.println(doc);  
  111.     }  
  112.     /** 
  113.      * 将html片段解析为body格式 
  114.      */  
  115.     public static void JsoupBody(){  
  116.         html = "<div><p>Lorem ipsum.</p>";  
  117.         doc = Jsoup.parseBodyFragment(html, baseUri);  
  118.         System.out.println(doc);  
  119.         Element body = doc.body(); //获取body元素,效果等同于doc.getElementsByTag("body")  
  120.         System.out.println("*******");  
  121.         System.out.println(body);  
  122.     }  
  123. }  


本文为Eliot原创,转载请注明出处: http://blog.csdn.net/xyw_eliot/article/details/9142865

本文转载自:http://blog.csdn.net/jenly121/article/details/17006433

Jenly

Jenly

粉丝 9
博文 35
码字总数 0
作品 28
深圳
私信 提问
Jsoup代码解读之三-Document的输出

Jsoup官方说明里,一个重要的功能就是output tidy HTML。这里我们看看Jsoup是如何输出HTML的。 HTML相关知识 分析代码前,我们不妨先想想,"tidy HTML"到底包括哪些东西: 换行,块级标签习惯...

黄亿华
2013/08/26
4.1K
2
OSChina原创:使用 jsoup 对 HTML 文档进行解析和操作

jsoup 简介 Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从HTML中攫取你所需的信息 和扩展 HT...

红薯
2010/12/17
17.8K
38
开源中国8-2期软件推荐 jsoup — Java的HTML解析器

jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。本站就是采用 jsoup 来做 HTML 处理。 示例代码: File input = new File("/tmp/input.html"); Document doc = Jso......

鉴客
2010/08/09
1K
0
使用 jsoup 对 HTML 文档进行解析和操作

刘 柄成, 站长, 开源中国社区 简介: jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作...

SeanCai
2011/03/02
910
0
Jsoup代码解读之七-实现一个CSS Selector

![street fighter][1] 当当当!终于来到了Jsoup的特色:CSS Selector部分。selector也是我写的爬虫框架webmagic开发的一个重点。附上一张street fighter的图,希望以后webmagic也能挑战Jsoup...

黄亿华
2013/08/30
2.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 我的视频网站vip账号和我厚脸皮的朋友们

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @Cobbage :分享小海的单曲《衡山路(2016现场版)》: 《衡山路(2016现场版)》- 小海 手机党少年们想听歌,请使劲儿戳(这里) @FalconChe...

小小编辑
44分钟前
4
0
Spring Cloud Alibaba 实战(十二) - Nacos配置管理

> 本章主要内容是:使用Nacos管理配置以及实现配置管理的原因,配置如何管理以及动态刷新和最佳实现总结,最后是Nacos配置刷新原理解读 该技术类似于Spring Cloud Config 1 配置管理的意义 项目...

JavaEdge
今天
8
0
面试官问你编码相关的面试题,把这篇甩给他就完事!

前情回顾:Java中一个字符占两字节 但为什么new String("字").getBytes().length 返回3个字节 今天主要聊一聊: 字节 字符 字符集 编码 字符编码 Java 内码和外码 Unicode 字节 例如 :00001...

gzc426
今天
9
0
写的简单sh脚本2

#!/bin/bashexport LANG="en_US.UTF-8"#chmod +x filename 记得给文件加可执行权限#./vsimstart.sh#启动vsim项目echo "start vism"#207------------------------------assets=vsim-a......

hexiaoming123
昨天
6
0
java基础(1)变量和常量

概要和总结: 数据类型图: 基本数据类型:只有基本功能-----保存数据 (4类8种)byte-short-int-long-float-double-char-boolean 引用数据类型:有更多功能,保存数据,处理数据...

煌sir
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部