/*** @(#)SearchCrawler.java, 2016年4月12日. Copyright 2016 Youdao, Inc. All rights*                         reserved. YOUDAO PROPRIETARY/CONFIDENTIAL. Use is*                         subject to license terms.*/
package testZK;import java.util.*;
import java.net.*;
import java.io.*;/*** * @author zhoukang*/
public class SearchCrawler extends Thread {private HashMap<String, ArrayList<String>> disallowListCache = new HashMap<String, ArrayList<String>>();private List<String> urlList;private static File resultFile = new File("result.txt");private static BufferedWriter writer;static {try {if(!resultFile.exists()) {resultFile.createNewFile();}writer = new BufferedWriter(new FileWriter(resultFile));} catch (Exception e) {//TODO:
        }}public SearchCrawler(String str, boolean file) throws IOException{urlList = new ArrayList<String>();if (file) {File f = null;BufferedReader reader = null;try { f = new File(str);reader = new BufferedReader(new FileReader(f));String line = "";while(line != null) {line = reader.readLine();urlList.add(line);}} catch (Exception e) {//TODO} finally {if(reader != null) {reader.close();}}} else {urlList.add(str);}}public BufferedWriter getBufferedWriter() {return writer;}public void run() {checkUrl(urlList);}private void checkUrl(List<String> urls) {Iterator<String> urlIter = urls.iterator();while(urlIter.hasNext()) {String url = urlIter.next();if(url == null || url.equals("")) {continue;}url = removeWwwFromUrl(url);URL verifiedUrl = verifyUrl(url);System.out.println(url);try {if(isRobotAllowed(verifiedUrl)) {writer.write(url+":true");} else {writer.write(url+":false");}writer.newLine();writer.flush();} catch (Exception e) {//TODO:
            }}        }private URL verifyUrl(String url) {if (!url.toLowerCase().startsWith("http://"))return null;URL verifiedUrl = null;try {verifiedUrl = new URL(url);} catch (Exception e) {return null;}return verifiedUrl;}private boolean isRobotAllowed(URL urlToCheck) {String host = urlToCheck.getHost().toLowerCase();ArrayList<String> disallowList = disallowListCache.get(host);if (disallowList == null) {disallowList = new ArrayList<String>();try {URL robotsFileUrl = new URL("http://" + host + "/robots.txt");BufferedReader reader = new BufferedReader(new InputStreamReader(robotsFileUrl.openStream()));String line;while ((line = reader.readLine()) != null) {if (line.indexOf("Disallow:") == 0) {String disallowPath = line.substring("Disallow:".length());int commentIndex = disallowPath.indexOf("#");if (commentIndex != -1) {disallowPath = disallowPath.substring(0,commentIndex);}disallowPath = disallowPath.trim();disallowList.add(disallowPath);}}disallowListCache.put(host, disallowList);} catch (Exception e) {return true; }}String file = urlToCheck.getFile();for (int i = 0; i < disallowList.size(); i++) {String disallow = disallowList.get(i);if (file.startsWith(disallow)) {return false;}}return true;}private String removeWwwFromUrl(String url) {int index = url.indexOf("://www.");if (index != -1) {return url.substring(0, index + 3) + url.substring(index + 7);}return (url);}private static void addShutDownHook(final SearchCrawler searchCrawler) {Runtime.getRuntime().addShutdownHook(new Thread() {public void run() {BufferedWriter writer = searchCrawler.getBufferedWriter();try {writer.close();} catch (Exception e) {//TODOSystem.out.println("Add error");}} });}public static void main(String[] args) throws InterruptedException, IOException{if (args.length != 1 && args.length != 2 ) {System.out.println("Usage-1:java SearchCrawler url");System.out.println("Usage-2:java SearchCrawler -f filename");return;}SearchCrawler crawler = null;if(args.length == 1) {crawler = new SearchCrawler(args[0], false);} else {crawler = new SearchCrawler(args[1], true);}addShutDownHook(crawler);crawler.setDaemon(true);crawler.start();crawler.join();  }
}

转载于:https://www.cnblogs.com/cane/p/5383735.html

java robots协议检测工具相关推荐

  1. java 内存检测工具

    今天偶然发现java一个内存检测工具: jstat 上网一搜, 参数如下 用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是 ...

  2. linux 系统arp检测工具,linux网络常用诊断工具

    ping命令是检测网络通讯链路状况工具之一,主要用于查看网络上另一个主机系统的网络连接是否正常. 参数: -c   设置完成要求回应的次数. -f   极限检测. -i   指定收发信息的间隔时间. ...

  3. linux java测试工具_Linux下Java虚拟机状态监测工具

    Linux下Java虚拟机状态检测工具 工具名称: jps     JVM Process Status Tool - Lists instrumented HotSpot Java virtual ...

  4. 小米登录协议分析_性能测试篇之Loadrunner与ida工具结合完成java vuser协议的脚本...

    你这么优秀,一定只想把"柠檬班"置顶 ▲ → 性能3期优秀作业 利用lr的java vuser协议完成 (登录,md5加密完成重置支付密码,获取订单列表)请求,并加if判断完善脚本 ...

  5. java内存泄漏怎么检测_JAVA内存泄漏原因和内存泄漏检测工具

    JAVA内存泄漏原因和内存泄漏检测工具 摘要 虽然Java 虚拟机(JVM)及其垃圾收 集器(garbage collector,GC)负责管理大多数的内存任务,Java 软件程序中还是有可能出现内 ...

  6. 最近开始研究PMD(一款采用BSD协议发布的Java程序代码检查工具)

    PMD是一款采用BSD协议发布的Java程序代码检查工具.该工具可以做到检查Java代码中是否含有未使用的变量.是否含有空的抓取块.是否含有不必要的对象等.该软件功能强大,扫描效率高,是Java程序员 ...

  7. java检测工具_常用Java代码质量检测评估工具

    常用Java代码质量检测评估工具 1. PMD from http://pmd.sourceforge.net/ PMD能够扫描Java 源代码,查找类似以下的潜在问题: 可能的bug--try/ca ...

  8. java 密码检测_Java工具集-密码检测工具

    代码示例 import java.util.regex.Pattern; /** * @program: simple_tools * @description: 密码检测工具类 * @author: ...

  9. Java好用的代码检测工具有哪些?

    Java老手应该都知道,阿里在2017年10月份的云栖大会上发布了基于Java开发手册的Java扫描插件,主要功能是扫描出java代码潜在的代码隐患,提升代码质量!将不符合规约的代码显示出来,还实现了 ...

  10. 四个Java死锁检测工具

    线程竞争的资源可以是:锁.网络连接.通知事件,磁盘.带宽,以及一切可以被称作"资源"的东西. 在程序执行的时候,难免会遇到死锁的情况. 下面介绍一下如何排查Java中的死锁线程. ...

最新文章

  1. 小眼睛适合大框还是小框眼镜_北京潘家园眼镜城良心商家推荐
  2. MySQL性能调优 读写分离
  3. ffmpeg-win32-v3.2.4 下载_iTools下载|iTools 4.4.3.4 官方中文版
  4. rpm安装mysql服务(5.7举例)
  5. python 实现简单查询页面_python web 实现简易天气查询
  6. 《系统集成项目管理工程师》必背100个知识点-02项目组织方式和特点
  7. 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
  8. SpringBoot —— Bean的注入方式
  9. Java基础---内部类详解
  10. 1121 - Reverse the lights 思维题
  11. 【Gym — 101473 G】Lines of Containers【思维题】
  12. Vue.js(九) 第三方常用插件
  13. word转变pdf插件
  14. Linux操作系统中常用软件包的下载命令
  15. java adsl 拨号_[zt]利用脚本实现ADSL自动拨号上网
  16. Excel 标记重复多余项
  17. 培养使用计算机的良好道德规范,浅谈如何提高学生学习信息技术的兴趣
  18. 威联通NAS备份到百度网盘
  19. Linux-下往移动硬盘中拷贝数据
  20. HTML div设置菜鸟教程

热门文章

  1. innobackupex: ibbackup failed at /usr/bin/innobackupex line 2560.
  2. weblogic IllegalArgumentException 解决办法
  3. 系统集成Nacos和Feign
  4. TCP三次握手和四次挥手详解 --- 转载
  5. 暴力枚举 --- 8.1 Subsets --- 图解
  6. filebeat配置介绍
  7. Linux 服务器之间文件传输
  8. java判断端口是否可用
  9. maven使用openjdk_openjdk8指定版本安装(maven指定版本安装)
  10. 日语输入法电脑版_如何安装日语输入法?(手机/电脑安装使用指南)