Jsoup的详细介绍可以参考:http://www.open-open.com/jsoup/
如果对于前端html,js,css有了解的会发现Jsoup绝对是一款高效的开源软件,其一大特点就是支持选择器来对html进行解析,工具的语法与js有些相似,用起来非常方便。下面的代码是从一个古诗词网站上抓取辛弃疾的词,很简单,基本上覆盖了Jsoup的基础语法。
package org.zdnuist.jsoup;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
* 开源工具Jsoup的学习
* @author zdnuist
*
*/
public class JsoupDemo {
public static void main(String[] args) {
parseHtml();
parseHtmlFromURL();
System.out.println("***************");
getAllLink();
}
/**
* 解析HTML-String
*/
public static void parseHtml() {
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
}
/**
* 解析指定网址中的html 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) 代替。
*/
public static void parseHtmlFromURL() {
try {
Document doc = Jsoup.connect("http://www.baidu.com/").get();
String title = doc.title();
System.out.println(title);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取到具体的内容
* @param url
*/
public static void parseXINQIJIFromNet(String url) {
try {
Document doc = Jsoup
.connect(url)
.timeout(3 * 1000).get();
String title = doc.title();
System.out.println(title);
Elements content = doc.select(".content");
Element body = content.get(0);
System.out.println(body.text().replaceAll("\\s+", "\n"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 取得所有链接
*/
public static void getAllLink(){
try {
Document doc = Jsoup.connect("http://www.xigutang.com/songci/xinqiji/")
.timeout(3*1000).get();
Elements listbox = doc.select(".listbox");
Element list = listbox.first();
Elements links = list.select("a[href]");
System.out.println(links.size());
for(Element link : links){
parseXINQIJIFromNet(link.attr("abs:href"));
System.out.println("**************************");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}