MinerUtil.java 爬虫工具类

package com.iteye.injavawetrust.miner;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; /**
* 爬虫工具类
* @author InJavaWeTrust
*
*/
public class MinerUtil { private static final Log LOG = LogFactory.getLog(MinerUtil.class); public static long starTime = 0; /**
* 判断是否为空
* @param param
* @return true-为空;false-非空
*/
public static boolean isBlank(String param) {
return (null == param || "".equals(param.trim())) ? true : false;
} /**
* URL是否以html结尾
* @param url
* @return true-是;false-否
*/
public static boolean checkURL(String url) {
String html = url.substring(url.lastIndexOf(".") + 1);
return "html".equals(html) ? true : false;
}
/**
* URL列表是否包含关键字
* @param key 关键字
* @param keys URL列表
* @return true-是;false-否
*/
public static boolean checkKeys(String key, List<String> keys) {
boolean flag = false;
for(String k : keys) {
if(key.contains(k)){
flag = true;
break;
}
}
return flag;
} public static boolean isValidFileName(String fileName) {
if (fileName == null || fileName.length() > 255){
return false;
} else {
return fileName
.matches("[^\\s\\\\/:\\*\\?\\\"<>\\|](\\x20|[^\\s\\\\/:\\*\\?\\\"<>\\|])*[^\\s\\\\/:\\*\\?\\\"<>\\|\\.]$");
}
} /**
* 获取URL
* @param url URL
* @return URL
*/
public static Set<String> getAllUrl(String url){
Set<String> urls = new HashSet<String>();
try {
Connection conn = Jsoup.connect(url);
conn.header("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13");//模拟浏览器
Document document = conn.timeout(5000).get();
Elements hrefs = document.select("a[href]");
Iterator<Element> hrefIter = hrefs.iterator();
while (hrefIter.hasNext()) {
Element href = hrefIter.next();
urls.add(href.attr("href"));
}
} catch (Exception e) {
LOG.info("获取URL出现异常,异常URL[" + url + "]");
LOG.info("异常信息[" + e.getMessage() + "]");
}
return urls;
} /**
* 毫秒转换成hhmmss
* @param ms 毫秒
* @return hh:mm:ss
*/
public static String msToss(long ms) {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));
String ss = formatter.format(ms);
return ss;
} /**
* 将html写入本地文件
* @param htmlText html内容
* @param htmlName html名称
*/
public static void getHtmlToLocal(Map<String, String> map){
Writer writer = null;
try {
String path = MinerConstanits.HTMLPATH + getToday();
makeDir(path);
writer = new OutputStreamWriter(new FileOutputStream(new File(path
+ File.separator + map.get("title"))), "UTF-8");
writer.write(map.get("html"));
writer.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 文件名不能包含下列任何字符:<br>
* \/:*?"<>|
* @param title 标题
* @return 去掉文件名不能包含的字符
*/
public static String fileName(String title){
return title
.replaceAll("\\\\", "")
.replaceAll("/", "")
.replaceAll(":", "")
.replaceAll("\\*", "")
.replaceAll("\\?", "")
.replaceAll("\"", "")
.replaceAll("<", "")
.replaceAll(">", "")
.replaceAll("\\|", "");
}
/**
* 获取当天日期
* @return 当天日期
*/
public static String getToday(){
String result = "";
Date date = new Date();
result = format(date);
return result;
}
/**
* 格式化日期
* @param date 日期
* @return yyyymmdd 日期
*/
public static String format(Date date){
String format = "yyyyMMdd";
SimpleDateFormat fmt = new SimpleDateFormat(format);
return fmt.format(date);
}
/**
* 创建存储目录
* @param path 存储目录
*/
public static void makeDir(String path) {
File file = new File(path);
if(!file.exists()){
file.mkdirs();
LOG.info("创建存储目录[" + path + "]");
}
} public static boolean checkBeforeStart(MinerConfig config) {
if(null == config){
LOG.info("config未配置!!!");
return false;
}
if(null == config.getKeys() || 0 == config.getKeys().size()){
LOG.info("包含关键字未配置!!!");
return false;
}
if(null == config.getStoreType()){
LOG.info("存储方式未配置!!!");
return false;
}
if(config.getMaxDepth() < 1){
LOG.info("爬取页面最大深度配置错误!!!");
return false;
}
if(config.getMinerHtmlThreadNum() < 1){
LOG.info("下载页面线程数配置错误!!!");
return false;
}
if(config.getMiseringThreadNum() < 1){
LOG.info("分析页面线程数配置错误!!!");
return false;
}
if(config.getMinserStoreThreadNum() < 1){
LOG.info("存储线程数配置错误!!!");
return false;
}
return true;
} public static void main(String[] args) {
String path = MinerConstanits.HTMLPATH + File.separator + getToday();
makeDir(path);
// System.out.println(getToday());
// String test = "http://my.163.com/2015/11/27/17763_578935.html";
// System.out.println(fileName(test));
// System.out.println(MinerUtil.isBlank(null));
// System.out.println(MinerUtil.isBlank(""));
// System.out.println(MinerUtil.isBlank(" "));
// System.out.println(MinerUtil.isBlank("bbb"));
// System.out.println(MinerUtil.isBlank(" bbb ")); // String key = "http://www.jqu.net.cn";
// List<String> keys = new ArrayList<String>();
// keys.add("http://www.jqu.net.cn");
// System.out.println(MinerUtil.checkKeys(key, keys));
} }

返回列表

MinerUtil.java 爬虫工具类的更多相关文章

  1. Miner.java 爬虫启动类

    Miner.java 爬虫启动类 package com.iteye.injavawetrust.miner; import java.util.concurrent.ThreadPoolExecut ...

  2. 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫

    前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,本文记录免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作 ...

  3. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  4. Java json工具类,jackson工具类,ObjectMapper工具类

    Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...

  5. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  6. Java并发工具类 - CountDownLatch

    Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...

  7. MinerDB.java 数据库工具类

    MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...

  8. 小记Java时间工具类

    小记Java时间工具类 废话不多说,这里主要记录以下几个工具 两个时间只差(Data) 获取时间的格式 格式化时间 返回String 两个时间只差(String) 获取两个时间之间的日期.月份.年份 ...

  9. Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie

    Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie >>>>>>>>>>>>& ...

随机推荐

  1. PHP $_GET 变量

    $_GET 变量 预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值. 从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏 ...

  2. AbstractQueuedSynchronizer源码解读

    1. 背景 AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)是Doug Lea大师创作的用来构建锁或者其他同步组件(信号量.事件等) ...

  3. 一小时入门PHP

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:[http://blog.csdn.net/sdksdk0/article/details/52332296](http://blog.csdn ...

  4. NLP系列(2)_用朴素贝叶斯进行文本分类(上)

    作者:龙心尘 && 寒小阳 时间:2016年1月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50597149 h ...

  5. SQL Server 虚拟化(2)——理想的SQL Server虚拟机架构

    本文属于SQL Server虚拟化系列 搭建SQL Server虚拟机,在各个组织之间都有自己的标准和最佳实践.从第一眼看去,光物理配置就有过百种,所有的这些细微差别都有可能为后续日常管理过程中故障侦 ...

  6. 简单将sublime text 配置为lua或c#一键编译运行环境

    lua { "cmd": "luajit $file", "selector":"source.lua" } C { & ...

  7. Studio 一些使用

    1,配置: W:\android_tools\AndroidStudio2.1.3_SDK\android-studio-ide-141.2456560-windows\android-studio\ ...

  8. SpringMVC+BUI实现文件上传(附详解,源码下载)

    中午有限时间写这博文,前言就不必多说了,直奔主题吧. BUI是一个前端框架,关于BUI的介绍请看博主的文章那些年用过的一些前端框架. 下面我们开始实例的讲解! 一.效果演示: 上传成功后,会发现本地相 ...

  9. 《Shazam It! Music Recognition Algorithms, Fingerprinting, and Processing》译文

    最近看到一篇老外写的博客,简单介绍了shazam的工作原理.图非常好,所以就把它翻译成中文,希望对搞听歌识曲的人有帮助. 你可能遇到这样的场景:在酒吧或者餐厅听到你非常熟悉的歌,也许你曾经听过无数次, ...

  10. K均值聚类的失效性分析

    K均值聚类是一种应用广泛的聚类技术,特别是它不依赖于任何对数据所做的假设,比如说,给定一个数据集合及对应的类数目,就可以运用K均值方法,通过最小化均方误差,来进行聚类分析. 因此,K均值实际上是一个最 ...