Jsoup的简易使用示例

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

测试用网页

<!doctype html>

<!-- http://jwc.yangtzeu.edu.cn/ -->

<html class="outlin colo">

<head>
    <meta charset="utf-8">
    <title>长江大学</title>
    <link type="text/css" rel="stylesheet" href="./css/reset.css">
    <link type="text/css" rel="stylesheet" href="./css/layout.css">
    <link type="text/css" rel="stylesheet" href="./css/yangtze.css">
    <script src="base.js"></script>
    <script src="./js/nodeObject.js"></script>
    <script src="./js/yangtze.js"></script>
</head>

<body>

    <div id="content">

        <!-- 顶部图片div -->
        <div id="header-imageDiv"></div>

        <!-- 顶部菜单div -->
        <div id="header-menuDiv">

            <div id="header-menu-table">

                <div class="header-menu-cell"><a href="#" title="首页">首页</a></div>
                <div class="header-menu-cell"><a href="#" title="机构设置">机构设置</a></div>
                <div class="header-menu-cell"><a href="#" title="规章制度">规章制度</a></div>
                <div class="header-menu-cell"><a href="#" title="教学建设">教学建设</a></div>
                <div class="header-menu-cell"><a href="#" title="教务管理">教务管理</a></div>
                <div class="header-menu-cell"><a href="#" title="考务管理">考务管理</a></div>
                <div class="header-menu-cell"><a href="#" title="实践创新">实践创新</a></div>
                <div class="header-menu-cell"><a href="#" title="质量评估">质量评估</a></div>
                <div class="header-menu-cell"><a href="#" title="学务管理">学务管理</a></div>
                <div class="header-menu-cell"><a href="#" title="服务指南">服务指南</a></div>
                <div class="header-menu-cell"><a href="#" title="下载中心">下载中心</a></div>

            </div>

        </div>
        <div class="space"></div>

        <!-- 顶部时间div -->
        <div id="header-dateDiv"></div>
        <div class="space"></div>

        <!-- 中间的tableDiv -->
        <div id="table">

            <!-- 左侧table-cell -->
            <div id="table-left">

                <div id="table-left-imageDiv"></div>
                <div class="space"></div>

                <h2 class="h2-style">高教信息<a href="#">+MORE</a></h2>
                <ul class="ul-type-1">
                    <li style="color : red;"><img src="./images/li_bg.jpg">&nbsp;<a href="#">教育部高等教育司2016年工作要点</a></li>
                    <li><img src="./images/li_bg.jpg">&nbsp;<a href="#">湖北省教育厅高等教育处2016年工作要点</a></li>
                    <li><img src="./images/li_bg.jpg">&nbsp;<a href="#">湖北省教育厅高等教育处2015年工作要点</a></li>
                    <li><img src="./images/li_bg.jpg">&nbsp;<a href="#">省委高校工委 省教育厅关于印发201</a></li>
                    <li><img src="./images/li_bg.jpg">&nbsp;<a href="#">教育部2015年工作要点</a></li>
                    <li><img src="./images/li_bg.jpg">&nbsp;<a href="#">近两年就业率较低的本科专业名单</a></li>
                </ul>
                <div class="space"></div>

                <h2 class="h2-style">友情链接</h2>
                <div id="select-type"></div>

            </div>
            <div class="space"></div>

            <!-- 中间table-cell -->
            <div id="table-center">

                <div id="table-center-topLineDiv"><span id="notice" onmouseover="switchTab(this)">教务通知</span><span id="thisweek" onmouseover="switchTab(this)">本周事务</span></div>

                <ul id="notice-ul">
                    <li>关于组织2017年(第十二届)长江大学大学生化学实验<span>2017-03-30</span></li>
                    <li>关于核查文科相关学院2013级毕业班学生成绩的通知<span>2017-03-30</span></li>
                    <li>关于组织申报第二批校级双语教学示范课程的通知<span>2017-03-30</span></li>
                    <li>查看更多...</li>
                </ul>

                <ul id="thisweek-ul">
                    <li>2016~2017学年第二学期6~7月份主要教学工作安排<span>2017-03-30</span></li>
                    <li>2016~2017学年第二学期5月份主要教学工作安排<span>2017-03-30</span></li>
                    <li>2016~2017学年第二学期4月份主要教学工作安排<span>2017-03-30</span></li>
                    <li>2016~2017学年第二学期3月份主要教学工作安排<span>2017-03-30</span></li>
                    <li>查看更多...</li>
                </ul>

                <div class="chooseTab"><span>教务通知</span><span>本周事务</span></div>

            </div>

            <!-- 右侧table-cell -->
            <div id="table-right">
            </div>

        </div>
        <div class="space"></div>

        <!-- 底部的menuDiv -->
        <div id="bottom-menuDiv"></div>
        <div class="space"></div>

    </div>

    <!-- 最底部的div -->
    <div id="footer"></div>

    <script>
        setup();
        switchTab(elementById("notice"));
        addEventss();

    </script>

</body>

</html>

Java代码

import java.io.File;
import java.util.ArrayList;

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

public class App {

    public static void main(String args[]) {

        try {

            File input = new File("/Users/YouXianMing/Documents/Project/HTML Project/yangtze/yangtze.html");
            Document doc = Jsoup.parse(input, "UTF-8", "http://yangtze.com/");

            // 根据元素id获取元素
            {
                Element content = doc.getElementById("content");
                System.out.println(content);
            }

            // 根据CSS的class名获取元素数组
            {
                ArrayList<Element> list = doc.getElementsByClass("space");
                for (Element element : list) {
                    System.out.println(element + "\n");
                }
            }

            // 根据标签获取元素数组
            {
                ArrayList<Element> list = doc.getElementsByTag("div");
                for (Element element : list) {
                    System.out.println(element + "\n");
                }
            }

            // 根据元素中含有的属性值获取元素数组
            {
                ArrayList<Element> list = doc.getElementsByAttribute("href");
                for (Element element : list) {
                    System.out.println(element + "\n");
                }
            }

            // 根据元素中含有的属性值获取元素数组
            {
                Element content = doc.getElementById("header-menu-table");
                // 元素的父元素
                System.out.println(content.parent());
                // 元素的所有子元素
                System.out.println(content.children());
                // 与该元素平级的第一个兄弟元素
                System.out.println(content.child(0).firstElementSibling());
                // 与该元素平级的最后一个兄弟元素
                System.out.println(content.child(0).lastElementSibling());
                // 该元素的前一个兄弟元素
                System.out.println(content.child(1).previousElementSibling());
                // 该元素的下一个兄弟元素
                System.out.println(content.child(0).nextElementSibling());
            }

            // 一个元素中的数据
            {
                Element content = doc.getElementsByClass("ul-type-1").first().child(0);
                // 获取文本内容
                System.out.println(content.text());
                // 获取tag名字
                System.out.println(content.tagName());
                // 获取tag对象
                System.out.println(content.tag());
                // 获取属性字典
                System.out.println(content.attributes());
                // 获取当前内容当中的html内容
                System.out.println(content.html());
                // 获取外部的html内容
                System.out.println(content.outerHtml());
                // 获取属性style的值
                System.out.println(content.attr("style"));
            }

            // 使用选择器语法来查找元素
            {
                Elements elements = null;
                // 通过标签查找元素
                elements = doc.select("a");
                System.out.println(elements);
                // 通过id查找元素
                elements = doc.select("#content");
                System.out.println(elements);
                // 通过class查找元素
                elements = doc.select(".ul-type-1");
                System.out.println(elements);
                // 通过属性查找元素
                elements = doc.select("[href]");
                System.out.println(elements);
                // 通过属性前缀查找元素
                elements = doc.select("[^hr]");
                System.out.println(elements);
                // 通过属性值来查找元素
                elements = doc.select("[id=notice]");
                System.out.println(elements);

                // 匹配属性值开头
                elements = doc.select("[onmouseover^=swit]");
                System.out.println(elements);

                // 匹配属性值结尾
                elements = doc.select("[onmouseover$=(this)]");
                System.out.println(elements);

                // 匹配包含了属性值
                elements = doc.select("[onmouseover*=Tab]");
                System.out.println(elements);

                // 正则表达式匹配
                elements = doc.select("ul[id~=^notice]");
                System.out.println(elements);
            }

        } catch (Exception e) {

            System.out.println(e);
        }
    }
}

注意

以下地方请自行替换,本人是从本地加载的html

以下是获取元素的几种情形

时间: 2024-10-03 19:13:49

Jsoup的简易使用示例的相关文章

【Jsoup学习礼记】示例程序: 获取所有链接

这个示例程序将展示如何从一个URL获得一个页面.然后提取页面中的所有链接.图片和其它辅助内容.并检查URLs和文本信息. 运行下面程序需要指定一个URLs作为参数 package org.jsoup.examples; import org.jsoup.Jsoup; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.

Couchbase之个人描述及入门示例

本文不打算抄袭官方或者引用他人对Couchbase的各种描述,仅仅是自己对它的一点理解(错误之处,敬请指出),并附上一个入门示例. ASP.NET Web项目(其他web开发平台也一样)应用规模小的时候,可以利用.net framework自带的缓存机制进行缓存,可是,当项目应用规模大了后,再这样万年不变的应用下去,恐怕难以取得良好效果.而C#本身是应用级开发语言,其擅长的是业务逻辑开发,而缓存这种与具体业务紧密程度不大的系统,用C#开发,显然不具有跨平台性,没有普适性,而且C#对缓存也基本停留

jsoup Cookbook(中文版)--爬虫(java)

转载:http://www.open-open.com/jsoup/ 目录: 入门 解析和遍历一个html文档 输入 解析一个html字符串 解析一个body片断 根据一个url加载Document对象 根据一个文件加载Document对象 数据抽取 使用dom方法来遍历一个Document对象 使用选择器语法来查找元素 从元素集合抽取属性.文本和html内容 URL处理 程序示例:获取所有链接 数据修改 设置属性值 设置元素的html内容 设置元素的文本内容 html清理 消除不受信任的htm

简易数据库

代码: <html><head><title>简易数据库示例</title> </head><body> <h1>使用Web Storage来做简易数据库示例</h1> <table> <tr><td>姓名:</td><td><input type="text" id="name"></td&g

SharePoint Server 2013 中的爬网最佳做法

了解在 SharePoint Server 2013 中爬网的最佳做法 搜索系统对内容进行爬网,以构建一个用户可以对其运行搜索查询的搜索索引.本文包含有关如何最有效地管理爬网的建议. 本文内容: 使用默认内容访问帐户对大部分内容进行爬网 有效使用内容源 对用户配置文件进行爬网,然后再对 SharePoint 网站进行爬网 使用连续爬网确保搜索结果为最新 使用爬网规则排除已爬网的不相关的内容 对 SharePoint Web 应用程序的默认区域进行爬网 降低对 SharePoint 爬网目标进行爬

js关联数组

标准javascript 是内含支持hash关联数组,经查找资料并测试,有关标准javascript内含的hash关联数组操作备忘如下 1.Hash关联数组定义 // 定义空数组 myhash = { } // 直接定义数组 myhash = {”key1″:”val1″, “key2″:”val2″ } // 用Array 定义数组 myhash = new Array(); myhash[”key1″] = “val1″; myhash[”key2″] = “val2″; 2.向Hash关联

08CMS之AJAX

与ajax可能有关的目录和文件: \include\js\common_footer.js \extend_home\libs\classes\ajax\libs\classes\ajax\include\application\models_base.php \include\application\application_base.php \include\application\controllers\ajax_controller.php 简易ajax示例: 1.根据<08CMS之新建独

代码:jquery自定义插件 demo

jquery自定义插件 demo 2016-1-13 只是一个简易的示例 <script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script> <script type="text/javascript"> $(function(){ $.fn.portamento = function

Navi.Soft20.WinForm操作手册

1概述 1.1应用场景 尽管互联网高速发展,互联网软件也随之越来越多,但桌面应用程序在某些领域中还是不可替代,如MIS,ERP,CRM等软件产品,同时,这类软件均包括一些通用的功能,如:与数据库操作,日志管理,权限管理等 本框架指在解决这些问题,并将通用的功能抽离并实现.使在开发过程中,将更多的精力放在业务逻辑 1.2面向对象 Net程序开发员 1.3开发环境 解决方案 开发环境 描述 NaviSoft20 VS2010或以上 整个框架只有此一个解决方案.Net类库包含2种.分别是Net4.0和