利用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. HDFS 处理命令记录

    hdfs dfs -ls hdfs dfs -mkdir hdfs dfs -put hdfs dfs -get hdfs dfs -cat hadoop 执行jar  输出的目录 必须要不存在的 y ...

  2. [Advanced Algorithm] - Symmetric Difference

    题目 创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组. 给出两个集合 (如集合 A = {1, 2, 3}和集合 B = ...

  3. 10--C++多态

    C++多态 C++多态技术 摘要 本文描述了C++中的各种多态性.重点阐述了面向对象的动态多态和基于模板的静态多态,并初步探讨了两种技术的结合使用. 关键词 多态  继续  虚函数  模板  宏  函 ...

  4. jdk?jre?

    很多人都搞不懂什么是jdk,什么是jre,只知道电脑安装了这两个就能开发和运行java程序,这里我简单讲讲什么是jdk,什么是jre. jdk,即Java Development Kit,故名思意就是 ...

  5. Unity与Android通信的中间件

    2.1.1 Fragment和Activity都需要实现的接口——IBaseView/** * Description:Basic interface of all {@link Activity} ...

  6. scrapy-redis使redis不止保存url

    先看scrapy-redis源码 class RedisMixin(object): """Mixin class to implement reading urls f ...

  7. 洛谷P1090 合并果子【贪心】

    在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所 ...

  8. 58.fetch phbase

    1.fetch phbase工作流程 The coordinating node identifies which documents need to be fetched and issues a ...

  9. node源码详解(四)

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource4 本博客同步在https://cnodejs.o ...

  10. 2018 noip 备战日志

    我是写给自己看的…… Day1 10.8 今天开始停晚修课了,开始认真备战考试了. 今天晚上效率不错,竟然不会累,应该是平时一直这个时间写作业大脑高度集中, 现在换了编程也一样可以集中到这个状态 一些 ...