Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。当前版本为1.7.1。
jsoup的主要功能如下:
1. 从一个URL,文件或字符串中解析HTML;
2. 使用DOM或CSS选择器来查找、取出数据;
3. 可操作HTML元素、属性、文本;
Jsoup官方网站:http://jsoup.org/.可以通过其给出的学习资料http://jsoup.org/cookbook/和它的API进行学习http://jsoup.org/apidocs/.
经过翻译的中文资料不妨参考http://www.open-open.com/jsoup/,这些都是学习Jsoup的好材料。
图所示是Jsoup包结构,Jsoup首先将一个Html文档或者Html片段解析成DOM结构,Html上的每一个元素都对应于DOM中的一个节点node。因此,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
例如,以下是一个Jsoup抽取Web页面的例子:
1 import java.net.URL; 2 3 import org.jsoup.Jsoup; 4 import org.jsoup.nodes.Document; 5 import org.jsoup.nodes.Element; 6 import org.jsoup.select.Elements; 7 8 public class JsoupTest 9 { 10 11 public static void main(String[] args) throws Exception 12 { 13 URL url = new URL("http://www.guet.edu.cn"); //连接一个页面 14 Document doc = Jsoup.parse(url, 3 * 1000); //解析获取Document对象 15 16 Elements test = doc.select("a"); //获取页面上所有的a元素 17 for (Element element : test) 18 { 19 //element.outerHtml() 和 element.toString()效果一样 20 System.out.println("链接源代码:" + element.outerHtml()); 21 System.out.println("链接地址:" + element.attr("href") + " 链接文本:" 22 + element.text()+" next sbl:"+element.nextSibling().nodeName()); 23 ; 24 } 25 26 } 27 }
至于如何获取一个HTML文档的页面所有文本内容,不妨使用上面的例子作如下修改:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.nodes.Node; import org.jsoup.select.Elements; public class LoadDocument { public static void main(String[] args) throws Exception { Document doc = Jsoup.connect("http://Jsoup.org").get(); String title = doc.title(); System.out.println("文档的Html内容:"); System.out.println(doc.html()); System.out.println("文本内容为:"); System.out.println(doc.text()); } }
结果如下图:
通过Jsoup,可以较为方便的抽取页面上的内容,更为方便的是《Use selector-syntax to find elements》可以制定抽取规则,抽取页面上的目标信息节点。
例如:
1 import java.io.File; 2 import java.io.IOException; 3 4 import org.jsoup.Jsoup; 5 import org.jsoup.nodes.Document; 6 import org.jsoup.nodes.Element; 7 import org.jsoup.select.Elements; 8 9 10 public class Use_selector_syntax_find_elements { 11 12 13 public static void main(String[] args) throws IOException 14 { 15 //File input = new File("http://www.hao123.com//index.html"); 16 Document doc = Jsoup.connect("http://www.hao123.com/index.htm").get(); 17 //Document doc = Jsoup.parse(input, "gb2312",""); 18 19 System.out.println("-----------------------------------------------"); 20 System.out.println(doc); 21 System.out.println("-----------------------------------------------"); 22 paser(doc); 23 } 24 25 public static void paser(Document doc) 26 { 27 Elements links = doc.select("a[href]"); // a with href 28 Elements pngs = doc.select("img[src$=.png]"); // img with src ending .png 29 Element masthead = doc.select("div.masthead").first(); // div with class=masthead 30 Elements resultLinks = doc.select("h3.r > a"); // direct a after h3 31 32 System.err.print(links); 33 System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++"); 34 35 } 36 }
Jsoup功能同HtmlParser,但却比Htmlparser更为方便,API更加简洁。