jsoup test

import java.io.File;

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.safety.Whitelist;

import org.jsoup.select.Elements;

 

public class test {

 

/*

* Jsoup.parse(String html) [html:是html代码]

* Jsoup.parse(String html, String baseUri) [baseUri:是用来将相对 URL 转成绝对URL]

* Jsoup.parseBodyFragment(String html)

* Jsoup.connect(String url) [方法说明:从一个URL加载一个Document对象]

* Jsoup.parse(File in, String charsetName, String baseUri) [方法说明:根据一个文件加载Document对象]

* Jsoup.parse(File in, String charsetName) [方法说明:根据一个文件加载Document对象]

* */

public static void main(String[] args) {

/*

* parse(String html, String baseUri) 这方法能够将输入的HTML解析为一个新的文档 (Document),

* 参数 baseUri 是用来将相对 URL 转成绝对URL,并指定从哪个网站获取文档。

* 如这个方法不适用,你可以使用 parse(String html) 方法来解析成HTML字符串如上面的示例。

* 只要解析的不是空字符串,就能返回一个结构合理的文档,其中包含(至少) 一个head和一个body元素。

* 一旦拥有了一个Document,你就可以使用Document中适当的方法或它父类 Element和Node中的方法来取得相关数据。

* */

// 直接从字符串中输入 HTML 文档

String html = "<html><head><title> 开源中国社区 </title></head>"

 + "<body><p> 这里是 jsoup 项目的相关文章 </p></body></html>"; 

Document doc = Jsoup.parse(html); 

 

//只用一行代码就可以将html转成纯文本:

System.out.println(Jsoup.parse(html).text());

try {

 

/*

 * connect(String url) 方法创建一个新的 Connection, 和 get() 取得和解析一个HTML文件。

 * 如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。

 * Connection 接口还提供一个方法链来解决特殊请求,具体如下:

 * Document doc = Jsoup.connect("http://example.com")

 *   .data("query", "Java")

 *   .userAgent("Mozilla")

 *   .cookie("auth", "token")

 *   .timeout(3000)

 *   .post();

 *   这个方法只支持Web URLs (http和https 协议); 

 *   假如你需要从一个文件加载,可以使用 parse(File in, String charsetName) 代替。

 * */

 

// 从 URL 直接加载 HTML 文档

Document doc1 = Jsoup.connect("http://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/").get(); 

String title = doc1.title(); 

// System.out.println(title1);

 

Document doc2 = Jsoup.connect("http://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/") 

 .data("query", "Java")   // 请求参数

 .userAgent("I ’ m jsoup") // 设置 User-Agent 

 .cookie("auth", "token") // 设置 cookie 

 .timeout(3000)           // 设置连接超时时间

 .post();                 // 使用 POST 方法访问 URL 

 

 

// System.out.println(doc2.getAllElements());

 

/*

 * parse(File in, String charsetName, String baseUri) 这个方法用来加载和解析一个HTML文件。

 * 如在加载文件的时候发生错误,将抛出IOException,应作适当处理。

 * baseUri 参数用于解决文件中URLs是相对路径的问题。如果不需要可以传入一个空的字符串。

 * 另外还有一个方法parse(File in, String charsetName) ,它使用文件的路径做为 baseUri。

 * 这个方法适用于如果被解析文件位于网站的本地文件系统,且相关链接也指向该文件系统。 

 * */

 

// 在本机硬盘上有一个HTML文件,需要对它进行解析从中抽取数据或进行修改。�ĵ�

File input = new File("D:/test.htm");

Document doc3 = Jsoup.parse(input, "UTF-8","http://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml//");

// System.out.println(doc3.html());

Element content = doc3.getElementById("ibm-masthead-dw");

Elements links = content.getElementsByTag("a");

for (Element link : links) {

String linkHref = link.attr("href");

String linkText = link.text();

// System.out.println(linkHref);

// System.out.println(linkText);

}

/*

* 这个select 方法在Document, Element,或Elements对象中都可以使用。

* 且是上下文相关的,因此可实现指定元素的过滤,或者链式选择访问。

* Select方法将返回一个Elements集合,并提供一组方法来抽取和处理结果

* */

 

Elements links2 = doc.select("a[href]"); // 具有 href 属性的链接��

// System.out.println(links2);

Elements gif = doc.select("img[src$=.gif]");// 所有引用 gif 图片的元素Ԫ��

// System.out.println(gif);

Element masthead = doc.select("div.masthead").first();// 找出定义了 class=masthead 的元素

// System.out.println(masthead);

//jsoup 的 attr 方法提供了一个 abs: 的操作

 

URL url = new URL("http://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/");

Document doc4 = Jsoup.parse(url, 3*5000);

 

Element link = doc4.select("a").first();

String relHref = link.attr("href"); // == "#ibm-content"

//链接包含主机地址

String absHref = link.attr("abs:href"); // "http://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/#ibm-content"

// System.out.println("relHref"+ relHref);

// System.out.println("absHref"+ absHref);

 

 

//脚本清除

String unsafe = "<p><a href='http://example.com/' οnclick='stealCookies()'>Link</a></p>";

String safe = Jsoup.clean(unsafe, Whitelist.basic());

// now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>

System.out.println(safe);

/*

 * 在解析文档的同时,我们可能会需要对文档中的某些元素进行修改,

 * 例如我们可以为文档中的所有图片增加可点击链接、修改链接地址或者是修改文本等。

 * */

doc.select("div.comments a").attr("rel", "nofollow"); 

// 为所有链接增加 rel=nofollow 属性

doc.select("div.comments a").addClass("mylinkclass"); 

// 为所有链接增加 class=mylinkclass 属性

doc.select("img").removeAttr("onclick"); // 删除所有图片的 onclick 属性

doc.select("input[type=text]").val(""); // 清空所有文本输入框中的文本

 

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

}

 

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值