java robots協議偵查工具

來源:互聯網
上載者:User

標籤:

/** * @(#)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) {                   //TODO                   System.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();      }}

 

java robots協議偵查工具

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.