Jsoup的简单的使用示例
利用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的简单的使用示例的更多相关文章
- unity Dotween插件的简单介绍及示例代码
unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的 ...
- [MySQL5.6] 一个简单的optimizer_trace示例
[MySQL5.6] 一个简单的optimizer_trace示例 前面已经介绍了如何使用和配置MySQL5.6中optimizer_trace(点击博客),本篇我们以一个相对简单的例子来跟踪op ...
- Skinned Mesh原理解析和一个最简单的实现示例
Skinned Mesh 原理解析和一个最简单的实现示例 作者:n5 Email: happyfirecn##yahoo.com.cn Blog: http://blog.csdn.net/n5 ...
- MongoDB下Map-Reduce使用简单翻译及示例
目录 Map-Reduce JavaScript 函数 Map-Reduce 行为 一个简单的测试 原文地址https://docs.mongodb.com/manual/core/map-reduc ...
- sqlalchemy(二)简单的连接示例
# -*- coding: utf-8 -*- import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.d ...
- Python正则表达式的简单应用和示例演示
前一阵子小编给大家连续分享了十篇关于Python正则表达式基础的文章,感兴趣的小伙伴可以点击链接进去查看.今天小编给大家分享的是Python正则表达式的简单应用和示例演示,将前面学习的Python正则 ...
- 一个简单的CSS示例
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 & ...
- Java程序中使用 Jsoup 爬虫( 简单示例 )
一.maven项目里pom添加jsoup依赖 <dependency> <groupId>org.jsoup</groupId> <artifactId> ...
- jsoup获取文档类示例
import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsou ...
随机推荐
- JNDI连接池连接Oracle数据库
今天做了一个评论的小功能,要求用JNDI连接池连接Oracle数据库,以前只是测试了是否连接的上,现在没想到一个JNDI连接池连接Oracle数据库,纠结了好久,原来都是Oracle数据库的问题,这是 ...
- 三维重建面试0:*SLAM滤波方法的串联综述
知乎上的提问,高翔作了回答:能否简单并且易懂地介绍一下多个基于滤波方法的SLAM算法原理? 写的比较通顺,抄之.如有异议,请拜访原文.如有侵权,请联系删除. 我怎么会写得那么长--如果您有兴趣可以和我 ...
- php多进程防止出现僵尸进程
对于用PHP进行多进程并发编程,不可避免要遇到僵尸进程的问题. 僵尸进程是指的父进程已经退出,而该进程dead之后没有进程接受,就成为僵尸进程(zombie)进程.任何进程在退出前(使用exit退出) ...
- PAT_A1120#Friend Numbers
Source: PAT A1120 Friend Numbers (20 分) Description: Two integers are called "friend numbers&qu ...
- 分治FFT模板
题目链接:https://www.luogu.org/problemnew/show/P4721 总结了一下蒟蒻FFT/NTT容易写错的地方: 1.rev数组求错. 2.cdq注意顺序:先递归 ...
- Java基础学习总结(67)——Java接口API中使用数组的缺陷
如果你发现在一个接口使用有如下定义方法: public String[] getParameters(); 那么你应该认真反思.数组不仅仅老式,而且我们有合理的理由避免暴露它们.在这篇文章中,我将试图 ...
- Automatic Tuning of Memory Management
4.2.2 Automatic Tuning of Memory Management Two memory management initialization parameters, MEMORY_ ...
- 【ACM】hdu_zs1_1001_水仙花数_201307271504
水仙花数 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submissio ...
- ThreadPoolExecutor源码分析(一)
一.前言 闲来无事,博主有重新翻看了一下jdk1.8版的ThreadPoolExecutor源码,看后写此笔记,画个圈圈,做个记录,这段源码,我看过,到处一游,嘻嘻~~ 二.ThreadPoolExe ...
- SUSAN算子