Jsoup 的简单的使用示例

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

利用 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 回帖 • 491 关注
  • Java

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

    3192 引用 • 8214 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 484 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 71 回帖
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 640 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 362 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 170 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    493 引用 • 928 回帖
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 1 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 181 关注
  • 印象笔记
    3 引用 • 16 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    8 引用 • 30 回帖 • 416 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 658 关注
  • 安全

    安全永远都不是一个小问题。

    202 引用 • 816 回帖
  • V2EX

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

    17 引用 • 236 回帖 • 306 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 2 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖 • 2 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 538 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 65 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 401 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    142 引用 • 208 回帖