jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
jsoup 可以从包括字符串、URL 地址以及本地文件来加载 HTML 文档,并生成 Document 对象实例。比如如下代码,通过相应的访问,便可获取页面内容,生成Document对象实例:
MyTest test = new MyTest();
String content = test.sendGet("http://www.XXX.com:8080/xxx.asp", "para1=xxx ¶2=" + "xxx"); //get请求访问页面(URL及参数已处理)
System.out.println(content);
输出内容即为html内容
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><meta http-equiv="content-type" content="text/html; charset=gb2312">
<TITLE>xxx网站标题</TITLE>
<META content="....." name="description">
<META content="....." name="keywords">
<HEAD>
..........
</HEAD><BODY leftmargin="1" topmargin="1" onload="javascript:resizeMe()">
................
<FORM action="" method="get" name="xxx" onsubmit="return xxxx();">
<TABLE width="360" border="1" align="center" cellpadding="4" bordercolor=#3366cc style="border-collapse: collapse">
<TR>
<TD colspan=2 class=tdc1 align=center height=24 bgcolor=#6699cc>xxxx表格标题xxxxxxx</TD>
</TR>
<TR class=tdc bgcolor=#EFF1F3>
<TD width="138" align="center" noswap>说明1</TD>
<TD width=* align="center" class=tdc2>内容1 内容2</TD>
</TR>
<TR class=tdc bgcolor=#EFF1F3>
<TD width="138" align="center" noswap>说明2</TD>
<TD width=* align="center" class=tdc2>内容3</TD>
</TR>
<TR class=tdc bgcolor=#EFF1F3>
<TD width="138" align="center" noswap>说明3</TD>
<TD width=* align="center" class=tdc2>内容4 更多请访问...</TD>
</TR>
</TABLE>
</BODY></HTML>
备注:以上代码已经过处理
现在,我们可以通过jsoup解析html,根据ID或者class定位到相应的位置,再做相应的处理,便可获取到想要获取的内容,如下:
Document doc = Jsoup.parse(content);
Elements td_content = doc.getElementsByClass("tdc2"); //定位到想要获取的内容表格
for (int i = 0; i < li_content.size(); i++) {
Element str = li_content.get(i);
String tag = str.tagName();
if (tag.equals("td")) {
String all_content = str.text();
String all_string = Jsoup.clean(all_content, Whitelist.none());
switch (i) {
case 1: { //第一行不要,所以从第二行处理
String[] all = all_string.split(" ");
if (all.length > 0 && all != null) {
for (int j = 0; j < all.length; j++) {
System.out.println(all[j].toString());
}
}
break;
}
case 2: {
System.out.println(all_content);
break;
}
case 3: {
String[] all = all_string.split(" ");
if (all.length > 0 && all != null) {
System.out.println(all[0].toString()); //“更多请访问...”不需要,只需取“内容4”
}
break;
}
}
}
}
如上运行,则打印出(结果已替换处理):
内容1
内容2
内容3
内容4
jsoup解析有很多种方法能得到同样的结构,就看你想用哪种思路。有用id定位的 有用tagname获取的 有用class 获取的。
常用的方法如下:
jsoup提供类似JS获取html元素:
getElementById(String id) 用id获得元素
getElementsByTag(String tag) 用标签获得元素
getElementsByClass(String className) 用class获得元素
getElementsByAttribute(String key) 用属性获得元素
同时还提供下面的方法提供获取兄弟节点:siblingElements(), firstElementSibling(), lastElementSibling();nextElementSibling(), previousElementSibling()
附件提供了通过http get请求方式抓取页面内容的java代码以及jsoup jar包。本文只是一个简单的例子,希望对初次接触jsoup的童鞋有帮助。
更多信息请访问jsoup API文档及参考其他资料。
参考网址:
http://jsoup.org/apidocs/
http://www.open-open.com/jsoup/
http://www.oschina.net/p/jsoup/
- 1
- 2
前往页