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 ...
随机推荐
- 【sqli-labs】 less42 POST -Error based -String -Stacked(POST型基于错误的堆叠查询字符型注入)
Forgot your password? New User click here? 看源码,可以发现和less 24不同的一点在于password字段没有进行转义处理 那就对password字段进行 ...
- 【sqli-labs】 less35 GET- Bypass Add Slashes(we dont need them) Integer based (GET型绕过addslashes() 函数的整型注入)
整型注入不用闭合引号,那就更简单了 http://192.168.136.128/sqli-labs-master/Less-35/?id=0 union select 1,database(),3% ...
- springboot测试类
Controller测试类 /** * Created by zhiqi.shao on 2017/5/12. */ @RunWith(SpringJUnit4ClassRunner.class) @ ...
- BZOJ 3510: 首都 LCT + multiset维护子树信息 + 树的重心
Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000 using namespace std; ...
- BZOJ 1715: [Usaco2006 Dec]Wormholes 虫洞 DFS版SPFA判负环
Description John在他的农场中闲逛时发现了许多虫洞.虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前).John的每个农场有M条小路(无向边)连接着N ...
- Day 22 面向对象编程
面向对象基础 面向对象编程(抽象) 对象:特征和技能的结合体 面向对象编程:一个个对象进行交互 优点:扩展性非常强 缺点:逻辑非常复杂 类与对象 类(类别):一系列具有相同特征和技能的对象 现实世界中 ...
- leetcode 188-maxProfit
public static int maxProfit(int k, int[] prices) { if (0 >= k || null == prices || 1 >= prices ...
- Linux运维工程师学习大纲
linux运维课程大纲: Linux运维: Linux系统管理: Linux服务及安全管理: httpd,lamp,lnmp cache:memcached,varnish DB:mysql(mari ...
- fastadmin 接口(上传)
/** * 添加注释指南 * */ public function store(Request $request) { dump($request);exit; $name = $request-&g ...
- SBC37x交叉编译平台QT+OPENCV【1】
在win7下安装Vbox虚拟机,然后安装Ubuntu10.04版本.上一篇说了根据厂商提供的编译器进行安装. 接下来要说的的环境准备.因为在Linux下对u盘的识别以及目录的共享,还有代码的编译传送运 ...