Jsoup学习之Jsoup类
2015-10-10 09:04
686 查看
Jsoup类
一、类结构
java.lang.Object
org.jsoup.Jsoup
public classJsoup
extends
Object
Jsoup类来自于org.jsoup.Jsoup包,并且继承自Object类。
二、方法
三、方法详解
使用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
plaincopyprint?
String html = "<p><ahref='http://www.baidu/' onclick='stealCookies()'> 百度一下,你就知道 </a></p>";
String doc = Jsoup.clean(html,Whitelist.basic());
//输出:<p><a href="http://www.baidu/"rel="nofollow"> 百度一下,你就知道 </a></p>
注:Whitelist包含几种过滤模式:none、basic、simpleText、basicWithImages、relaxed,具体过滤规则请参考:Whitelist类
拓展:
创建URL连接
参数:
返回值:
返回连接。你可以添加data,cookies,和 headers;设置user-agent,
referrer,method
解析:
与url建立连接,这个方法只支持http和https协议,连接的方式可以是get也可以是post,并且可以为连接提供所需要的信息,如data、cookies、userAgent、method等。
实例:
[java] view
plaincopyprint?
Document doc = Jsoup.connect("http://example.com")
.userAgent("Mozilla").data("name","jsoup").get();
Document doc = Jsoup.connect("http://example.com")
.cookie("auth","token").post();
判断输入的Html文档是否符合Whitelist过滤条件的要求。
参数:
返回值:
如果html中包含的标签和属性都包含在whitelist定义的规则内,即whitelist没有过滤掉bodyhtml中的内容,则返回true,否则返回false。
实例:
[java] view
plaincopyprint?
String html = "<p><ahref='http://www.baidu/'onclick='stealCookies()'> 百度一下,你就知道 </a></p>";
System.out.println(Jsoup.isValid(html, Whitelist.basic()));
//输出false,即Whitelist.basic()对html过滤掉了html中的部分内容,onclick这个属性不属于Whitelist.basic(),被过滤掉。
解析文件的内容,生成Html
参数:
返回值:
返回健全的html文档
异常:
实例:
[java] view
plaincopyprint?
File file = new File("C://baidu.txt");
Document doc = Jsoup.parse(file,"GBK","http://www.baidu.com");
拓展:
读取输入流,解析成Document。可以提供一个轮流的解析器(parser),例如XML解释器(或者非XML解释器)
参数:
返回值:
返回健全的html文档
异常:
实例:
[java] view
plaincopyprint?
FileInputStream input = new FileInputStream("C://baidu.txt");
Document doc = Jsoup.parse(input, "GBK", "http://www.baidu.com", Parser.htmlParser());
System.out.println(doc);
input.close();
拓展:
将Html字符串转换为Document。可以提供一个轮流的解析器(parser),例如XML解释器(或者非XML解释器)
参数:
返回值:
返回健全的html文档
解析:
将Html字符串解析为Document。
实例:
[java] view
plaincopyprint?
String html = "<html><head><title>Firstparse</title></head>"
+ "<body><p>Parsed HTML into adoc.</p></body></html>";
Document doc = Jsoup.parse(html,"www.baidu.com", Parser.htmlParser());
System.out.println(doc);
拓展:
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
plaincopyprint?
URL url = new URL("http://www.baidu.com");
Document doc = Jsoup.parse(url,500);
System.out.println(doc);
将Html片段解析成body格式
参数:
返回值:
返回健全的html文档
实例:
[java] view
plaincopyprint?
String html = "<div><p>Loremipsum.</p>";
Document doc = Jsoup.parseBodyFragment(html);
System.out.println(doc);
拓展:
四、总结
Jsoup类的主要功能实现的是连接URL以及对解析Html。连接URL有两种方式:
一般是使用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 html, String baseUri, Parser parser)
还可以使用clean方法对html进行过滤,使用isValid方法判断html是否符合过滤规则。
五、实例
[java] view
plaincopyprint?
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
import org.jsoup.safety.Whitelist;
public class Load {
private static Document doc;
private static String html;
private static String url = "http://www.baidu.com";
private static String baseUri = "http://www.baidu.com";
public static Document getDoc() {
return doc;
}
public static void setDoc(Document doc) {
Load.doc = doc;
}
public static void main(String[] args){
try {
LoadHtml();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 设置代理服务器(ps:单位用的代理上网)
*/
public static void Host(){
System.getProperties().setProperty("proxySet", "true");
//用的代理服务器
System.getProperties().setProperty("http.proxyHost", "192.168.130.15");
//代理端口
System.getProperties().setProperty("http.proxyPort", "8848");
}
public static void LoadHtml() throws Exception{
Host();
JsoupClean();
JsoupConnect();
JsoupIsValid();
JsoupParseFile();
JsoupParseStream();
JsoupParseStr();
JsoupURL();
JsoupBody();
}
/**
* html过滤
*/
public static void JsoupClean(){
html = "<p><a href='http://blog.csdn.net/xyw_eliot' onclick='stealCookies()'> Eliot </a></p>";
String doc = Jsoup.clean(html, baseUri, Whitelist.basic());
System.out.println(doc);
}
/**
* 连接URL返回Document
* @throws IOException
*/
public static void JsoupConnect() throws IOException{
doc = Jsoup.connect(url).get();
System.out.println(doc);
}
/**
* 判断是否符合过滤规则
*/
public static void JsoupIsValid(){
html = "<p><a href='http://www.baidu/'onclick='stealCookies()'> 百度一下,你就知道 </a></p>";
System.out.println(Jsoup.isValid(html, Whitelist.basic()));
}
/**
* 解析文件
* @throws IOException
*/
public static void JsoupParseFile() throws IOException{
File file = new File("C://baidu.txt");
doc = Jsoup.parse(file, "GBK", baseUri);
System.out.println(doc);
}
/**
* 解析流
* @throws Exception
*/
public static void JsoupParseStream() throws Exception{
FileInputStream in = new FileInputStream("C://baidu.txt");
doc = Jsoup.parse(in, "GBK", baseUri);
System.out.println(doc);
in.close();
}
/**
* 解析字符串
*/
public static void JsoupParseStr(){
html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
doc = Jsoup.parse(html, baseUri);
System.out.println(doc);
}
/**
* 解析URL
* @throws Exception
*/
public static void JsoupURL() throws Exception{
URL url = new URL("http://www.baidu.com");
doc = Jsoup.parse(url, 500);
System.out.println(doc);
}
/**
* 将html片段解析为body格式
*/
public static void JsoupBody(){
html = "<div><p>Lorem ipsum.</p>";
doc = Jsoup.parseBodyFragment(html, baseUri);
System.out.println(doc);
Element body = doc.body(); //获取body元素,效果等同于doc.getElementsByTag("body")
System.out.println("*******");
System.out.println(body);
}
}
本文为Eliot原创,转载请注明出处:http://blog.csdn.net/xyw_eliot/article/details/9142865
一、类结构
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
plaincopyprint?
String html = "<p><ahref='http://www.baidu/' onclick='stealCookies()'> 百度一下,你就知道 </a></p>";
String doc = Jsoup.clean(html,Whitelist.basic());
//输出:<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建立连接,这个方法只支持http和https协议,连接的方式可以是get也可以是post,并且可以为连接提供所需要的信息,如data、cookies、userAgent、method等。
实例:
[java] view
plaincopyprint?
Document doc = Jsoup.connect("http://example.com")
.userAgent("Mozilla").data("name","jsoup").get();
Document doc = Jsoup.connect("http://example.com")
.cookie("auth","token").post();
[align=center][/align]
isValid
public static boolean isValid(String bodyHtml, Whitelist whitelist)
判断输入的Html文档是否符合Whitelist过滤条件的要求。
参数:
bodyHtml–要测试的html
whitelist–测试的过滤规则whitelist
返回值:
如果html中包含的标签和属性都包含在whitelist定义的规则内,即whitelist没有过滤掉bodyhtml中的内容,则返回true,否则返回false。
实例:
[java] view
plaincopyprint?
String html = "<p><ahref='http://www.baidu/'onclick='stealCookies()'> 百度一下,你就知道 </a></p>";
System.out.println(Jsoup.isValid(html, Whitelist.basic()));
//输出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
plaincopyprint?
File file = new File("C://baidu.txt");
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
plaincopyprint?
FileInputStream input = new FileInputStream("C://baidu.txt");
Document doc = Jsoup.parse(input, "GBK", "http://www.baidu.com", Parser.htmlParser());
System.out.println(doc);
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
plaincopyprint?
String html = "<html><head><title>Firstparse</title></head>"
+ "<body><p>Parsed HTML into adoc.</p></body></html>";
Document doc = Jsoup.parse(html,"www.baidu.com", Parser.htmlParser());
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
plaincopyprint?
URL url = new URL("http://www.baidu.com");
Document doc = Jsoup.parse(url,500);
System.out.println(doc);
parseBodyFragment
public static Document parseBodyFragment(String bodyHtml, String baseUri)
将Html片段解析成body格式
参数:
bodyHtml–Html片段
baseUri-将html中相对路径转换为绝对路径的URL
返回值:
返回健全的html文档
实例:
[java] view
plaincopyprint?
String html = "<div><p>Loremipsum.</p>";
Document doc = Jsoup.parseBodyFragment(html);
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 html, String baseUri, Parser parser)
还可以使用clean方法对html进行过滤,使用isValid方法判断html是否符合过滤规则。
五、实例
[java] view
plaincopyprint?
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
import org.jsoup.safety.Whitelist;
public class Load {
private static Document doc;
private static String html;
private static String url = "http://www.baidu.com";
private static String baseUri = "http://www.baidu.com";
public static Document getDoc() {
return doc;
}
public static void setDoc(Document doc) {
Load.doc = doc;
}
public static void main(String[] args){
try {
LoadHtml();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 设置代理服务器(ps:单位用的代理上网)
*/
public static void Host(){
System.getProperties().setProperty("proxySet", "true");
//用的代理服务器
System.getProperties().setProperty("http.proxyHost", "192.168.130.15");
//代理端口
System.getProperties().setProperty("http.proxyPort", "8848");
}
public static void LoadHtml() throws Exception{
Host();
JsoupClean();
JsoupConnect();
JsoupIsValid();
JsoupParseFile();
JsoupParseStream();
JsoupParseStr();
JsoupURL();
JsoupBody();
}
/**
* html过滤
*/
public static void JsoupClean(){
html = "<p><a href='http://blog.csdn.net/xyw_eliot' onclick='stealCookies()'> Eliot </a></p>";
String doc = Jsoup.clean(html, baseUri, Whitelist.basic());
System.out.println(doc);
}
/**
* 连接URL返回Document
* @throws IOException
*/
public static void JsoupConnect() throws IOException{
doc = Jsoup.connect(url).get();
System.out.println(doc);
}
/**
* 判断是否符合过滤规则
*/
public static void JsoupIsValid(){
html = "<p><a href='http://www.baidu/'onclick='stealCookies()'> 百度一下,你就知道 </a></p>";
System.out.println(Jsoup.isValid(html, Whitelist.basic()));
}
/**
* 解析文件
* @throws IOException
*/
public static void JsoupParseFile() throws IOException{
File file = new File("C://baidu.txt");
doc = Jsoup.parse(file, "GBK", baseUri);
System.out.println(doc);
}
/**
* 解析流
* @throws Exception
*/
public static void JsoupParseStream() throws Exception{
FileInputStream in = new FileInputStream("C://baidu.txt");
doc = Jsoup.parse(in, "GBK", baseUri);
System.out.println(doc);
in.close();
}
/**
* 解析字符串
*/
public static void JsoupParseStr(){
html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
doc = Jsoup.parse(html, baseUri);
System.out.println(doc);
}
/**
* 解析URL
* @throws Exception
*/
public static void JsoupURL() throws Exception{
URL url = new URL("http://www.baidu.com");
doc = Jsoup.parse(url, 500);
System.out.println(doc);
}
/**
* 将html片段解析为body格式
*/
public static void JsoupBody(){
html = "<div><p>Lorem ipsum.</p>";
doc = Jsoup.parseBodyFragment(html, baseUri);
System.out.println(doc);
Element body = doc.body(); //获取body元素,效果等同于doc.getElementsByTag("body")
System.out.println("*******");
System.out.println(body);
}
}
本文为Eliot原创,转载请注明出处:http://blog.csdn.net/xyw_eliot/article/details/9142865
相关文章推荐
- Jsoup学习之Whitelist类
- Jsoup学习之Document类
- JS动态改变select选择变更option的index值
- JS数组定义
- C#操作 JSON方法汇总
- js观察者模式
- 公历和农历转换的JS代码
- 使用 jsoup 对 HTML 文档进行解析和操作
- C# 技巧(3) C# 操作 JSON
- 使用json-lib封装json
- JavaScript实现Ajax小结
- JSP九大内置对象
- js中(function(){…})()立即执行函数写法理解(转载oschina)
- js模块化历程
- js继承原理
- JSP中使用JSTL按不同条件输出内容的方法
- JSP实现用于自动生成表单标签html代码的自定义表单标签
- jsp实现Servlet文件下载的方法
- 页面内容排序插件jSort使用方法
- clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切