利用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,还是有很多东西等待自己慢慢发现......

Jsoup的简单的使用示例的更多相关文章

  1. unity Dotween插件的简单介绍及示例代码

    unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的 ...

  2. [MySQL5.6] 一个简单的optimizer_trace示例

    [MySQL5.6] 一个简单的optimizer_trace示例   前面已经介绍了如何使用和配置MySQL5.6中optimizer_trace(点击博客),本篇我们以一个相对简单的例子来跟踪op ...

  3. Skinned Mesh原理解析和一个最简单的实现示例

    Skinned Mesh 原理解析和一个最简单的实现示例   作者:n5 Email: happyfirecn##yahoo.com.cn Blog: http://blog.csdn.net/n5 ...

  4. MongoDB下Map-Reduce使用简单翻译及示例

    目录 Map-Reduce JavaScript 函数 Map-Reduce 行为 一个简单的测试 原文地址https://docs.mongodb.com/manual/core/map-reduc ...

  5. sqlalchemy(二)简单的连接示例

    # -*- coding: utf-8 -*- import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.d ...

  6. Python正则表达式的简单应用和示例演示

    前一阵子小编给大家连续分享了十篇关于Python正则表达式基础的文章,感兴趣的小伙伴可以点击链接进去查看.今天小编给大家分享的是Python正则表达式的简单应用和示例演示,将前面学习的Python正则 ...

  7. 一个简单的CSS示例

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 & ...

  8. Java程序中使用 Jsoup 爬虫( 简单示例 )

    一.maven项目里pom添加jsoup依赖 <dependency> <groupId>org.jsoup</groupId> <artifactId> ...

  9. jsoup获取文档类示例

    import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsou ...

随机推荐

  1. 获取 PHPstorm编辑器 注册码地址

    网址: http://idea.lanyus.com/ 注册码有效期为2016年11月24日至2017年11月23日使用前请将“0.0.0.0 account.jetbrains.com”添加到hos ...

  2. 移动端mui常用方法

    本文分享一些用Mui的时候所采的坑 1.mui中上拉刷新事件a标签中的链接.元素onclick事件在手机上点击不了 mui('body').on('tap','a',function(){docume ...

  3. HTML5 video常用属性

    一.视频video常用标签方法 <!-- controls 控制条,播放暂停等 controlslist 控制不允许全屏 不允许下载等 poster 封面 autoplay 自动播放 muted ...

  4. Uoj 52. 【UR #4】元旦激光炮 神题+交互题

    Code: #include "kth.h" #include<iostream> int minn(int x,int y){return x<y?x:y;}; ...

  5. eas之dep的前置脚本和后置脚本

    dep的前置脚本和后置脚本,什么时候写,是这样解释的:    前置脚本是在方法前执行,后置脚本是在方法后执行    1.比如保存扩展,如果你要在保存前校验某个字段的值,你要在前置脚本中写,如果要保存后 ...

  6. [luogu1090 SCOI2003] 字符串折叠(区间DP+hash)

    传送门 Solution 区间DP,枚举断点,对于一个区间,枚举折叠长度,用hash暴力判断是否能折叠即可 Code #include <cstdio> #include <cstr ...

  7. ro多层的事务处理失败的困惑

    现象: 用 :: ::'' 在客户端用上面的语句取得数据,然后修改数据,通过RO的web service提交数据失败: 用 -- ::-- ::'‘ 在客户端用上面的语句取得数据,然后修改数据,通过R ...

  8. Orcale用户管理

    类 ------表 对象----行 属性----列 软件开发流程: 需求调研 需求分析 概要分析 详细分析 编码 测试 上线 维护 论坛: 1.注册和登录 2.发帖,回帖(关注,浏览数) 用户:(昵称 ...

  9. 关于c对文件的操作

    要求从键盘输入给定文件的路径,要求将他中的内容读取出来并输入到你需要建的一个文本文档中还要从键盘输入到建的一个文本文当中 #include <stdio.h> int main() { F ...

  10. Cloudera 5.8.3 SolrCloud+HDFS的索引数据备份和恢复。(需重启solr进程。)

    一.备份基于HDFS的solrCloud集合数据 1.确认要备份的solr文件夹. /solr/history_customer_collection_test 2.开启HDFS快照功能. hdfs ...