jsoup 1.6.2发布 最棒的Java HTML解析器

jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。

jsoup 1.6.2 发布了,改版包含很多的 bug 修复,松散的 XML 解析模式,功能调整以及内存的改进。

详情请看官方发行说明:

http://jsoup.org/news/release-1.6.2

jsoup的主要功能如下:

  1. 从一个URL,文件或字符串中解析HTML;
  2. 使用DOM或CSS选择器来查找、取出数据;
  3. 可操作HTML元素、属性、文本;

jsoup是基于MIT协议发布的,可放心使用于商业项目。

示例代码:

Document doc =Jsoup.connect("http://example.com") .data("query","Java")   .userAgent("Mozilla")   .cookie("auth","token")   .timeout(3000)   .post();

 

      从文件中解析的方法:

 

 

File input =newFile("/tmp/input.html");Document doc =Jsoup.parse(input,"UTF-8","http://example.com/");

 

 

  类试js  jsoup提供下面方法:

 

 

 同时还提供下面的方法提供获取兄弟节点:

 siblingElements()firstElementSibling()lastElementSibling();nextElementSibling()previousElementSibling()

用下面方法获得元素的数据:

 

 

操作html提供了下面方法:

 

通过类似jquery的方法操作html
File input =newFile("/tmp/input.html");Document doc =Jsoup.parse(input,"UTF-8","http://example.com/");Elements links = doc.select("a[href]");// a with hrefElements pngs = doc.select("img[src$=.png]");   // img with src ending .pngElement masthead = doc.select("div.masthead").first();   // div with class=mastheadElements resultLinks = doc.select("h3.r > a");// direct a after h3

 

支持的操作有下面这些:

 

  • tagname 操作tag

  • ns|tag ns或tag

  • #id  用id获得元素 

  • .class 用class获得元素

  • [attribute] 属性获得元素

  • [^attr]: 以attr开头的属性

  • [attr=value] 属性值为value

  • [attr^=value][attr$=value][attr*=value] 

  • [attr~=regex]正则

  • *:所以的标签 

选择组合

  • el#id el和id定位

  • el.class e1和class定位

  • el[attr] e1和属性定位

  • ancestor child ancestor下面的child

等等
抓取网站标题和内容及里面图片的事例:
public  void parse(String urlStr) {
// 返回结果初始化。

Document doc = null;
try {
doc = Jsoup
.connect(urlStr)
.userAgent(
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)") // 设置User-Agent
.timeout(5000) // 设置连接超时时间
.get();
} catch (MalformedURLException e) {
log.error( e);
return ;
} catch (IOException e) {
if (e instanceof SocketTimeoutException) {
log.error( e);
                                return ;
}
if(e instanceof UnknownHostException){
log.error(e);
return ;
}
log.error( e);
return ;
}
system.out.println(doc.title());
Element head = doc.head();
Elements metas = head.select("meta");
for (Element meta : metas) {
String content = meta.attr("content");
if ("content-type".equalsIgnoreCase(meta.attr("http-equiv"))
&& !StringUtils.startsWith(content, "text/html")) {
log.debug( urlStr);
return ;
}
if ("description".equalsIgnoreCase(meta.attr("name"))) {
system.out.println(meta.attr("content"));
}
}
Element body = doc.body();
for (Element img : body.getElementsByTag("img")) {
String imageUrl = img.attr("abs:src");//获得绝对路径
for (String suffix : IMAGE_TYPE_ARRAY) {
if(imageUrl.indexOf("?")>0){
imageUrl=imageUrl.substring(0,imageUrl.indexOf("?"));
}
if (StringUtils.endsWithIgnoreCase(imageUrl, suffix)) {
imgSrcs.add(imageUrl);
break;
}
}
}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www.open-open.com/jsoup/parsing-a-document.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值