Jsoup 的简单的使用示例

本贴最后更新于 2672 天前,其中的信息可能已经东海扬尘

利用 Jsoup 中的相关方法实现网页中的数据爬去,本例子爬去的网页为比较流行的 programmableweb 中的 mashup 描述内容,然后为数据库中存在的 mashup 添加相应的描述。

package com.test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.bean.mashup_tags_apis;
import com.daoImpl.MashupDaoImpl;

public class JsoupTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		List<String> mashupName = new ArrayList<String>();
		List<String> mashupDescription = new ArrayList<String>();
		MashupDaoImpl mashupDaoImpl = new MashupDaoImpl();
		List<mashup_tags_apis> mashup_tags_apis = mashupDaoImpl
				.findAllmashup_tags_apis();

		try {

			// 获取网页内容,从第二页开始,第1页特殊处理
			for (int p = 220; p < 365; p++) {
				System.out.println("正在爬取第" + p + "个页面........");
				org.jsoup.nodes.Document doc = Jsoup.connect("http://www.programmableweb.com/mashups/directory/"
										+ p).get();

				// 通过ID获得需要的表格
				Element content = doc.getElementById("mashups");

				// 按照[href*=/mashup/]取得数据
				Elements name = content.select("[href*=/mashup/]");

				// 踢出版本信息
				String RegexMatcher = "[\\d.]+";

				// 向mashupName集合中添加名字
				for (int i = 0; i < name.size(); i++) {
					String Name = name.get(i).text();
					if (name.get(i).hasText() && !Name.matches(RegexMatcher)) {

						mashupName.add(Name);
					}
				}

				// 取得描述信息
				Elements description = content.getElementsByTag("p");
				// 向mashupDescription集合中添加描述信息
				for (Element descri : description) {
					String Comment = descri.text();
					if (p == 1) {
						// 第一页处理方式(名字和描述都为空)
						if (Comment != null && Comment.length() > 2) {
							if (Comment != null) {
								mashupDescription.add(Comment);
							}
						}
					} else {
						// 从第二页开始处理方式,描述为空用NoDescriptions占位
						if (Comment == null) {
							Comment = "NoDescriptions";
						}
						mashupDescription.add(Comment);
					}

				}

				// 更新数据库
				for (int i = 0; i < mashupName.size(); i++) {
					String Name = mashupName.get(i);
					for (int j = 0; j < mashup_tags_apis.size(); j++) {
						if (Name.equals(mashup_tags_apis.get(j).getName())) {
							String destrcipString = mashupDescription.get(i);
							if (Name != null && destrcipString != null) {
								if (!mashupDaoImpl.updateMashup_tags_apis(
										destrcipString, Name)) {
									System.out.println("更新失败!");
								}
							}
						}
					}
				}

				// 清空集合爬取下一个页面
				mashupDescription.clear();
				mashupName.clear();
				System.out.println("第---------" + p + "---------个页面完成!\n");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// 显示输出查看是否正确
		// for (int i = 0; i < mashupName.size(); i++) {
		// System.out.println((i + 1) + " " + mashupName.get(i));
		// }
		//
		// for (int j = 0; j < mashupDescription.size(); j++) {
		// System.out.println((j + 1) + " " + mashupDescription.get(j));
		// }
		System.out.println("恭喜您,描述添加成功!");
	}
}

这也是我第一次是使用 Jsoup,还是有很多东西等待自己慢慢发现......

  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • jsoup

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

    6 引用 • 1 回帖 • 484 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3170 引用 • 8209 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 339 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    86 引用 • 122 回帖 • 622 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 2 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 268 回帖 • 59 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 544 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖 • 2 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    90 引用 • 898 回帖
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    563 引用 • 3532 回帖
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 441 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 19 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 510 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 407 回帖 • 488 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    5 引用 • 62 回帖 • 1 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4599 回帖 • 705 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    150 引用 • 3775 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    676 引用 • 535 回帖
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 245 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    46 引用 • 25 回帖 • 5 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 342 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 191 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 725 关注
  • abitmean

    有点意思就行了

    27 关注
  • V2Ray
    1 引用 • 15 回帖 • 3 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 511 回帖
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖