`
dh189
  • 浏览: 135325 次
  • 性别: 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-1.11.3.jar

    它的最新版本是1.11.3,这个版本的Jsoup提供了.jar文件,包括`jsoup-1.11.3.jar`,这使得Java开发者可以方便地将其集成到他们的项目中,进行网页抓取和分析任务。`jsoup-1.11.3-javadoc.jar`包含了该版本的API文档,...

    jsoup-jsoup-1.6.1.zip

    **jsoup:强大的Java HTML解析库** jsoup是一款在Java平台上广泛使用的开源库,它的主要功能是解析HTML文档,提供了一种易于使用且功能强大的API,使得开发者可以方便地提取和操作HTML数据。jsoup的设计目标是处理...

    jsoup-jsoup-1.12.2.zip

    它使用了一个近似于浏览器的HTML解析器,可以理解网页的实际布局和元素关系。 2. **DOM操作**:如同JavaScript中的DOM操作,jsoup提供了类似的方法来查找、遍历和修改HTML元素。例如,你可以使用CSS选择器来选取...

    JAVA源码HTML解析器jsoupJAVA源码HTML解析器jsoup

    JAVA源码HTML解析器jsoupJAVA源码HTML解析器jsoup

    java资源HTML解析器jsoupjava资源HTML解析器jsoup

    java资源HTML解析器 jsoupjava资源HTML解析器 jsoup提取方式是百度网盘分享地址

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

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

    jsoup-1.6.3.rar HTML解析器

    综上所述,jsoup是一个强大的HTML解析库,它简化了Java开发者处理HTML文档的工作,提供了丰富的API和CSS选择器支持。无论是在数据提取、网页解析还是安全防护方面,jsoup都是一个值得信赖的工具。通过使用`jsoup-...

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

    **jsoup:Java的HTML解析库** jsoup是一款强大的Java库,专为处理HTML文档而设计。它允许开发者轻松地解析、提取和修改HTML内容,就像在Web浏览器中使用jQuery那样方便。jsoup的主要功能包括: 1. **HTML解析**:...

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

    综上所述,基于Java的实例开发源码-HTML解析器 jsoup是一个强大的工具,用于抓取、解析和操作HTML内容。它简化了处理HTML的复杂性,让开发者可以专注于数据的提取和分析,而不是处理底层的网络请求和解析细节。通过...

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

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

    jsoup Java HTML解析器

    **jsoup Java HTML解析器详解** jsoup是一个用于处理实际世界HTML的Java库。它提供了非常方便的方法来提取和操作数据,使用DOM,CSS以及类似于jQuery的API。jsoup能够理解HTML的不完美之处,同时提供了强大的功能来...

    jsoup-1.6.1.jar

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

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

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

    jsoup-1.11.2.rar

    - **HTML解析器**:jsoup能够解析HTML字符串,将其转换为一个DOM(文档对象模型)结构,类似于浏览器如何解析网页。这使得开发者可以像处理XML一样处理HTML,通过DOM节点进行查找、修改和提取数据。 - **CSS选择器*...

    jsoup-1.11.2.jar JsoupXpath-0.3.2

    至于文件"libs",这通常指的是包含库文件的目录,其中"jsoup-1.11.2.jar"和"JsoupXpath-0.3.2"是Java的库文件,需要添加到项目的类路径(ClassPath)中才能在Java程序中使用。 总的来说,Jsoup和JsoupXpath为Java...

    jsoup-annotations是Jsoup注解的POJO

    总结来说,JSoup-Annotations是JSoup库的一个补充,它通过注解的方式简化了HTML解析过程,使得Java开发者在处理HTML数据时更加高效和便捷。在进行Web爬虫开发时,结合JSoup和JSoup-Annotations可以大大提高代码质量...

    jsoup:Java HTML 解析器

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

    jsoup-1.14.3-bin.zip

    jsoup是一个强大的Java库,专门设计用于处理HTML文档,尤其是在实际的网络环境下。这个库的核心功能是解析HTML,将其转化为一个可操作的DOM(文档对象模型)结构,允许开发者通过DOM方法和CSS选择器来便捷地提取和...

    使用Jsoup解析html网页

    Jsoup虽然不是完整的DOM解析器,但其简单易用的API和高效的性能使其在许多情况下成为更好的选择。相比于标准的DOM解析器,Jsoup更注重实际的网页解析需求,它的错误容忍度更高,能够处理一些不规范的HTML代码。 ...

Global site tag (gtag.js) - Google Analytics