`
dh189
  • 浏览: 132961 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

java 强悍的html解析器--jsoup

阅读更多
今天学习了一个java的html解析器(jsoup),以前一直使用htmlParser,感觉htmlParser处理html还可以,然而jsoup更强大,简单来说jsoup就是一个java版的jquery,个人认为很相似,方法名和选择器都很相像,比如jquery比较常用的方法:html()、text()、attr()等,如果熟悉jquery的话那学习jsoup就非常简单了,要是不熟悉jquery就多做些例子看看官方提供的教材和api也很快能学会的。
官方网站:http://jsoup.org/
我的网站“导航189”在“热帖”板块抓取天涯的数据时候就是使用jsoup来解析html http://www.dh189.com/
截图:


在附件中有:jsoup-1.2.3.jar jsoup-1.2.3-javadoc.jar jsoup-1.2.3-sources.jar 三个文件

开始使用jsoup:
import java.net.URL;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupTest {

	public static void main(String[] args) throws Exception {
		URL url = new URL("http://www.dh189.com/");
		Document doc = Jsoup.parse(url, 3 * 1000);
		//获取所有的链接
		Elements test = doc.select("a");
		for (Element element : test) {
			//element.outerHtml() 和  element.toString()效果一样
			System.out.println("链接源代码:" + element.outerHtml());
			System.out.println("链接地址:" + element.attr("href") + "  链接文本:" + element.text());
		}

	}
}


jsoup选择器支持如下:

PatternExample
**
Eh1
ns Efb name finds elements
E#iddiv#wrap, #logo
E.classdiv.left, .result
E[attr]a[href], [title]
E[^attrPrefix][^data-], div[^data-]
E[attr=val]img[width=500], a[rel=nofollow]
E[attr^=valPrefix]a[href^=http:]
E[attr$=valSuffix]img[src$=.png]
E[attr*=valContaining]a[href*=/search/]
E[attr~=regex]img[src~=(?i)\\.(png\jpe?g)] div.header[title]
E Fdiv a, .logo h1
E > Fol > li
E + Fli + li, div.head + div
E ~ Fh1 ~ p
E, F, Ga[href], div, h3
E:lt(n)td:lt(3) finds the first 2 cells of each row
E:gt(n)td:gt(1) finds cells after skipping the first two
E:eq(n)td:eq(0) finds the first cell of each row
E:has(selector)div:has(p) finds divs that contain p elements
E:contains(text)p:contains(jsoup) finds p elements containing the text "jsoup".
E:matches(regex)td:matches(\\d+) finds table cells containing digits. div:matches((?i)login) finds divs containing the text, case insensitively.

官方提供的例子links:
package org.jsoup.examples;

import org.apache.commons.lang.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.Jsoup;
import org.jsoup.select.Elements;

import java.net.URL;
import java.io.IOException;

/**
 * Example program to list links from a URL.
 */
public class ListLinks {
    public static void main(String[] args) throws IOException {
        Validate.isTrue(args.length == 1, "usage: supply url to fetch");
        URL url = new URL(args[0]);
        print("Fetching %s...", url.toExternalForm());

        Document doc = Jsoup.parse(url, 3*1000);
        Elements links = doc.select("a[href]");
        Elements media = doc.select("[src]");
        Elements imports = doc.select("link[href]");

        print("\nMedia: (%d)", media.size());
        for (Element src : media) {
            if (src.tagName().equals("img"))
                print(" * %s: <%s> %sx%s (%s)",
                        src.tagName(), src.attr("abs:src"), src.attr("width"), src.attr("height"),
                        trim(src.attr("alt"), 20));
            else
                print(" * %s: <%s>", src.tagName(), src.attr("abs:src"));
        }

        print("\nImports: (%d)", imports.size());
        for (Element link : imports) {
            print(" * %s <%s> (%s)", link.tagName(),link.attr("abs:href"), link.attr("rel"));
        }

        print("\nLinks: (%d)", links.size());
        for (Element link : links) {
            print(" * a: <%s>  (%s)", link.attr("abs:href"), trim(link.text(), 35));
        }
    }

    private static void print(String msg, Object... args) {
        System.out.println(String.format(msg, args));
    }

    private static String trim(String s, int width) {
        if (s.length() > width)
            return s.substring(0, width-1) + ".";
        else
            return s;
    }
}

其他的一些例子:
Element div = doc.select("div").first(); // <div></div>
div.text("five > four"); // <div>five &gt; four</div>
div.prepend("First ");
div.append(" Last");
// now: <div>First five &gt; four Last</div>

File input = new File("/tmp/input.html"); 
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); 
Elements links = doc.select("a[href]"); // a with href 
Elements pngs = doc.select("img[src$=.png]");  // img with src ending .png 
Element masthead = doc.select("div.masthead").first(); // div with class=masthead 
Elements resultLinks = doc.select("h3.r > a"); // direct a after h3

  • 大小: 28.9 KB
分享到:
评论
2 楼 y185130162 2011-07-05  
<div class="webreview">
<span dir="ltr" class="b">
性价比:好;环境:好
</span>
<span dir="ltr" class="snippet">
很好,不错 ,很棒
</span>
<span dir="ltr" class="xxxxx">
xxxxxxxxxxxxxxxx
</span>
</div>

求教 ,上面的这个汉子 怎么解析出来...
1 楼 pthill 2011-04-04  
为什么我的element.text()是乱码啊。

相关推荐

    基于java的开发源码-HTML解析器 jsoup.zip

    基于java的开发源码-HTML解析器 jsoup.zip 基于java的开发源码-HTML解析器 jsoup.zip 基于java的开发源码-HTML解析器 jsoup.zip 基于java的开发源码-HTML解析器 jsoup.zip 基于java的开发源码-HTML解析器 jsoup.zip ...

    jsoup Java HTML解析器

    jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器

    jsoup-jsoup-1.6.1.zip

    jsoup是一款Java的HTML解析器,主要用来对HTML解析。其解析器能够尽最大可能从你提供的HTML文档来创见一个干净的解析结果,无论HTML的格式是否完整。

    jsoup-jsoup-1.12.2.zip

    jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。

    基于Java的实例开发源码-HTML解析器 jsoup.zip

    基于Java的实例开发源码-HTML解析器 jsoup.zip

    JAVA爬虫Jsoup -Mybatis-Plusaricle-crawling-master.zip

    Jsoup 是一个 Java 的 HTML 解析器,主要用于从网页中提取数据。通过 Jsoup,我们可以方便地解析 HTML 源码,从而获取我们所需的数据。 使用 HttpUrlConnection 类发送 HTTP 请求,接着使用 Jsoup 对响应的 HTML ...

    使用java-jsoup解析html页面内容,爬取想要的信息(如号段)

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

    jsoup Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容

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

    Jsoup HTML解析器For Java 在Java程序中使用JQuery操作DOM

    Jsoup HTML解析器For Java 在Java程序中使用JQuery操作DOM 模式识别的新技术 狂顶

    jsoup:Java HTML 解析器

    jsoup:Java HTML 解析器 jsoup是一个用于处理现实世界 HTML 的 Java 库。它使用最好的 HTML5 DOM 方法和 CSS 选择器,提供了一个非常方便的 API,用于获取 URL 以及提取和操作数据。 jsoup实现了WHATWG HTML5规范...

    基于Java的实例源码-HTML解析器 jsoup.zip

    基于Java的实例源码-HTML解析器 jsoup.zip

    jsoup-1.6.3.rar HTML解析器

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

    基于Java的源码-HTML解析器 jsoup.zip

    基于Java的源码-HTML解析器 jsoup.zip

    jsoup-1.6.1.jar

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

    基于Java的HTML解析器 jsoup.zip

    基于Java的HTML解析器 jsoup.zip

    基于java的HTML解析器 jsoup.zip

    基于java的HTML解析器 jsoup.zip

    jsoup-1.5.1

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

    HTML解析器 jsoup

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

    jsoup-1.8.8.jar 包下载

    jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 1. 从一个URL,文件或字符串中解析HTML; 2. 使用...

Global site tag (gtag.js) - Google Analytics