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();
}
}
}