jsoup用法

1.三种途径来加载Document:字符串,URL地址,文件
String str="<html><head><title>jsoup</title></head><body></body></html>";
//----------------------将String转换成Document----------------------
Document doc = Jsoup.parse(str);		//1.

 //2.
 //白名单列表定义了哪些元素和属性可以通过清洁器,其他的元素和属性一律移除
        Whitelist wl=new Whitelist();
        //比较松散的过滤,包括
        //"a", "b", "blockquote", "br", "caption", "cite", "code", "col",
        //"colgroup", "dd", "div", "dl", "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6",
        //"i", "img", "li", "ol", "p", "pre", "q", "small", "strike", "strong",
        //"sub", "sup", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "u",
        //"ul"
        wl.relaxed();
        //没有任何标签,只有文本
        wl.none();
        //常规的过滤器
        //"a", "b", "blockquote", "br", "cite", "code", "dd", "dl", "dt", "em",
        //"i", "li", "ol", "p", "pre", "q", "small", "strike", "strong", "sub",
        //"sup", "u", "ul"
        wl.basic();
        //常规的过滤器,多了一个img标签
        wl.basicWithImages();
        //文本类型的标签
        //"b", "em", "i", "strong", "u"
        wl.simpleText();
        //另外还可以自定义过滤规则,例如
        wl.addTags("a");
        //执行过滤
        Jsoup.clean(str, wl);		
Document doc = Jsoup.parseBodyFragment(str);


//----------------------从URL加载----------------------
//1.
String url="http://www.baidu.com/"
Document doc = Jsoup.connect(url).get();
//获取标题
String title = doc.title();


//2.
//data(key,value)是该URL要求的参数
//userAgent制定用户使用的代理类型
//cookie带上cookie,如cookie("JSESSIONID","FDE234242342342423432432")
//连接超时时间
//post或者get方法
//header添加请求头
//referrer设置请求来源
Documentdoc = Jsoup.connect(url)
		  .data("query", "Java")
		  .userAgent("Mozilla")
		  .cookie("auth", "token")
		  .timeout(3000).header("Content-Type","text/html")
		  .referrer("127.0.0.1")
		  .post();
		  
		  
		  
//----------------------从文件加载----------------------
File file = new File("文件路径");
Document doc=Jsoup.parse(file, "UTF-8","相对的URL");
System.out.println(doc.title());
       
           

2.选择器

jsoup提供类似JS获取html元素:
getElementById(String id) 用id获得元素
getElementsByTag(String tag) 用标签获得元素
getElementsByClass(String className) 用class获得元素
getElementsByAttribute(String key)  用属性获得元素
同时还提供下面的方法提供获取兄弟节点:siblingElements(), firstElementSibling(), lastElementSibling();nextElementSibling(), previousElementSibling()

获得与设置元素的数据
attr(String key)  获得元素的数据 attr(String key, String value) 设置元素数据 
attributes() 获得所以属性
id(), className()  classNames() 获得id class得值
text()获得文本值
text(String value) 设置文本值
html() 获取html 
html(String value)设置html
outerHtml() 获得内部html
data()获得数据内容
tag()  获得tag 和 tagName() 获得tagname 

操作html元素:
append(String html), prepend(String html)
appendText(String text), prependText(String text)
appendElement(String tagName), prependElement(String tagName)
html(String value)

jsoup还提供了类似于JQuery方式的选择器
采用选择器来检索数据
tagname 使用标签名来定位,例如 a 
ns|tag     使用命名空间的标签定位,例如 fb:name 来查找 <fb:name> 元素 
#id     使用元素 id 定位,例如 #logo 
.class     使用元素的 class 属性定位,例如 .head 
*     定位所有元素 
[attribute] 使用元素的属性进行定位,例如 [href] 表示检索具有 href 属性的所有元素 
[^attr] 使用元素的属性名前缀进行定位,例如 [^data-] 用来查找 HTML5 的 dataset 属性 
[attr=value]使用属性值进行定位,例如 [width=500] 定位所有 width 属性值为 500 的元素 
[attr^=value],[attr$=value],[attr*=value] 这三个语法分别代表,属性以 value 开头、结尾以及包含 
[attr~=regex]使用正则表达式进行属性值的过滤,例如 img[src~=(?i)\.(png|jpe?g)] 
以上是最基本的选择器语法,这些语法也可以组合起来使用

组合用法
el#id      定位id值某个元素,例如 a#logo -> <a id=logo href= … > 
el.class 定位 class 为指定值的元素,例如 div.head -> <div class=head>xxxx</div> 
el[attr] 定位所有定义了某属性的元素,例如 a[href] 
以上三个任意组合     例如 a[href]#logo 、a[name].outerlink 

除了一些基本的语法以及这些语法进行组合外,jsoup 还支持使用表达式进行元素过滤选择
:lt(n)     例如 td:lt(3) 表示小于三列 
:gt(n)     div p:gt(2) 表示 div 中包含 2 个以上的 p 
:eq(n)     form input:eq(1) 表示只包含一个 input 的表单 
:has(seletor)     div:has(p) 表示包含了 p 元素的 div 
:not(selector)     div:not(.logo) 表示不包含 class=logo 元素的所有 div 列表 
:contains(text)     包含某文本的元素,不区分大小写,例如 p:contains(oschina) 
:containsOwn(text)     文本信息完全等于指定条件的过滤 
:matches(regex)     使用正则表达式进行文本过滤:div:matches((?i)login) 
:matchesOwn(regex)     使用正则表达式找到自身的文本 

——————————————————————————————————————————————————————————
//url网址作为输入源
Document doc = Jsoup.connect("http://www.example.com").timeout(60000).get();
//File文件作为输入源
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://www.example.com/");
//String作为输入源
Document doc = Jsoup.parse(htmlStr);
和java script类似,Jsoup提供了下列的函数
getElementById(String id) 通过id获得元素
getElementsByTag(String tag) 通过标签获得元素
getElementsByClass(String className) 通过class获得元素
getElementsByAttribute(String key) 通过属性获得元素

同时还提供下面的方法提供获取兄弟节点:
siblingElements(), firstElementSibling(), lastElementSibling();nextElementSibling(), previousElementSibling()

用下面方法获得元素的数据: 
attr(String key) 获得元素的数据
attr(String key, String value) 设置元素数据
attributes() 获得所有属性
id(), className() classNames() 得到id class的值
text()得到文本值
text(String value) 设置文本值
html() 获取html 
html(String value)设置html
outerHtml() 获得内部html
data()获得数据内容
tag() 得到tag 和 tagName() 得到tagname

操作html提供了下面方法:
append(String html), prepend(String html)
appendText(String text), prependText(String text)
appendElement(String tagName), prependElement(String tagName)
html(String value)

3.Document 继承自 Element 类,Element类有一个很好的方法,叫select
Elements elements = doc.select("span");		//通过标签来查找,直接写 "标签名" 就好,不需要尖括号
Elements elements = doc.select("#mySpan"); //通过id来查找,使用方法跟css指定元素一样,用#
Elements elements = doc.select(".myClass");//通过id来查找,使用方法跟css指定元素一样,用. 
Elements elements = doc.select("span[class=class1]span[id=id1]");//规则为 标签名【属性名=属性值】,标签名可写可不写,多个属性即多个【】,如上
Elements elements = doc.select("span[^cl]");//规则为 标签名【^属性名前缀】,标签名可写可不写,多个属性即多个【】。
Elements elements = doc.select("span[class~=^AB]");//规则为 标签名【属性名~=正则表达式】,以上的正则表达式的意思是查找以class值以AB为开头的标签,标签名可写可不写,多个属性即多个【】
Elements elements = doc.select("span:contains(3)");//规则为 标签名:contains(文本值)
Elements elements = doc.select("span:matchesOwn(^3)");//规则为 标签名:matchesOwn(正则表达式),以上的正则表式的意思是以文本值以3为开头的标签



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值