Jsoup学习之Jsoup类

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/' οnclick='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类

拓展:

public static String clean(String bodyHtml,  Whitelist whitelist)
这个没有提供baseUri这个参数,即没有提供将相对路径转换为绝对路径的功能。
public static String clean(String bodyHtml,
                           String baseUri,
                           Whitelist 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/'οnclick='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' οnclick='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/'οnclick='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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值