JSoup——用Java解析html网页内容

当需要从网页上获取信息时,需要解析html页面。筛选指定标签,并获取其值是必不可少的操作,解析html页面这方面的利器,Python有BeautifulSoup,Java一直没有好的工具,之前的HtmlParser非常难用,虽能解析,但不能过滤,只能从头到尾地遍历各个节点,非常不便,而Jsoup是甚至比BeautifulSoup更加方便的工具,Jsoup支持类似于CSS(或jquery)的选择器语法,来实现非常强大和灵活的查找功能。

下面说说其基本用法:

1)Jsoup.parse(html)//建立一个html文本指定的html文档,返回一个Document对象

2)Document.select(filter)//按照过滤器指定条件,筛选满足条件的所有元素(或称为标签),返回一个Elements对象,表示一组Element对象。

3)Elements.first()//返回Elements的第一个Element对象

4)Element.text()//获取一个标签首尾之间的内容,如
String html="<div>我是一个div</div>";
Document doc=Jsoup.parse(html);
doc.getElementsByTag("div").first().text();//输出"我是一个div"

5)Element.attr(attrname),获取标签某个属性的值,如
String html="<div>我是一个div</div>";
Document doc=Jsoup.parse(html);
doc.getElementsByTag("div").first().attr("class")的值为"divStyle"

给出一个综合示例:

public static HashMap<String, Object> getDetails(String html)
    {
        HashMap<String, Object> details = new HashMap<String, Object>();
     //解析开始
        Document doc = Jsoup.parse(html);
     //获取形如<div class="result_info ...">something</div>的第一个div元素,class^=result_info表示class以result_info开头,^是正则表达式的开始
     Element divAll = doc.select("div[class^=result_info]").first();
     
        //System.out.println(divAll.text());
        Element head = divAll.select("h3").first();//获取div中的h3标签
        String tvname = head.select("a").attr("title").trim();//获取h3标签中a标签的title属性值
        String year = "";
        if (head.select("em").size() > 0)//假如h3标签中存在多个<em></em>标签
        {
            year = head.select("em").first().text().trim();//只要第一个<em>首尾之间的文本
        }
        String score = "";
        Element scoreSection = divAll.select("p").first();
        if (scoreSection != null)
        {
            Elements es = scoreSection.select("span");//选择span元素
            int size = es.size();
            for (int i = 0; i < size; i++)
            {
                Element e = es.get(i);
                String content = e.text().trim();
                content = content.replace("\u00A0", "");//替换&nbsp;为空格
                score += content;
            }
        }
        HashMap<String, String> lstOtherInfo = new HashMap<String, String>();
        Elements otherSections = divAll.select("div[class^=result_info_cont]");//获取满足class以result_info_cont开头的所有div元素
        int size = otherSections.size();//获取满足条件的div元素的总数是多少
        int infoCount = 0;
        for (int i = 0; i < size && infoCount < 3; i++)
        {
            String value = "";
            Element item = otherSections.get(i);//获取第i个元素
            boolean keyflag = true;
            String key = "";
            for (int index = 0; index < item.children().size(); index++)//Element.children()用于获取元素的直接子元素
            {
                Element e = item.child(index);//获取第index个子元素
                if (keyflag)
                {
                    key = e.text().trim();
                    if (key == "简介")
                        break;
                    keyflag = false;
                }
                else
                {
                    if (e.children().size() > 0)
                    {
                        for (int b = 0; b < e.children().size(); b++)
                        {
                            value += e.child(b).text().trim() + ",";
                        }
                    }
                    else
                    {
                        String contents = e.text().trim();
                        value += contents + ",";
                    }
                }
            }
            value = value.replaceAll("[" + "," + "]$", "");
            lstOtherInfo.put(key, value);
            infoCount++;
        }
        details.put("tv", tvname);
        details.put("year", year);
        details.put("score", score);
        details.put("otherInfo", lstOtherInfo);
        return details;
    }

参考链接:

http://jsoup.org/apidocs/

https://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/

http://www.open-open.com/jsoup/selector-syntax.htm

时间: 2024-10-24 02:34:10

JSoup——用Java解析html网页内容的相关文章

jsoup实现java抓取网页内容。

Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HTML 中攫取你所需的信息和 扩展 HTMLParser 对自定义标签的处理能力.但现在我已经不再使用 htmlparser 了,原因是 htmlparser 很少更新,但最重要的是有了 jsoup . jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非

java爬取网页内容 简单例子(2)——附jsoup的select用法详解

http://www.cnblogs.com/xiaoMzjm/p/3899366.html [背景] 在上一篇博文java爬取网页内容 简单例子(1)——使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则表达式 对于没有很好正则表达式基础的人——比如说我T_T——是一件蛮困难的事.这一篇,我们改用jsoup,一个强大的解析html工具,去解析html,你会发现,一切都变得很容易. [准备工作] 下载:jsou

Java解析html之JSOUP(译)-jsoup Cookbook(1)

解析和遍历文档 解析HTML文档: String html = "<html><head><title>First parse</title></head>" + "<body><p>Parsed HTML into a doc.</p></body></html>"; Document doc = Jsoup.parse(html); 解析器尽可

java解析页面包

http://www.open-open.com/jsoup/parsing-a-document.htm jsoup: Java HTML Parser jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-lik

JAVA解析XML之SAX方式

JAVA解析XML之SAX方式 SAX解析xml步骤 通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser 创建一个类继承DefaultHandle,重写方法进行业务处理并创建这个类的实例handle 重写DefaultHandle类的方法 startElement方法用来遍历xml文件的开始标签; endEle

Java解析JSON对象

今天学习一下Java 解析 JSON 准备工作 参考文档 1) www.json.org 2 ) 参考公司其他人的代码(这个就不说了) 依赖jar包 1) org.json.jar 提供以下我的网盘链接 http://pan.baidu.com/s/1jG2zSwe 主要的类 JSON主要有两种结构 1)name/value 的集合 2)value 的集合,在大多数语言中的list,array等,这里的 value 个人觉得就是一个JSON,也就是说是JSON的集合 JAVA处理JSON的类 1

HexDump.java解析

从包名我们可以看出该类并没有对应用开发者开放,也就是说在google开放的Android API文档中并没有该类的相关介绍:好在Android系统源码是开源的,因此我在解决framework中问题的时候发现了这个工具类,由于工作原因一直没有回头在细细的领会这个工具类的精髓,因此今天花点时间对这个类进行全面的分析一遍,以备不时之需. 首先分析之前,我们需要了解该类使用来进行16禁止转换的,我之前也写过相关的工具类,但是去了解Google的精神还是有必要的. package com.android.

java解析xml的三种方法

java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; // public class Saxhandler extends DefaultHandler { @Override public void startDocument() throws

java解析xml汇总

转载于http://www.cnblogs.com/jiugehuanying/archive/2012/01/12/2320058.html [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath [引言] 目前在Java中用于解析XML的技术很多,主流的有DOM.SAX.JDOM.DOM