天天看點

小白如何用Java編寫爬蟲程式

初入爬蟲行業的程式員,往往會因為爬蟲代碼一個字元錯誤導緻程式不能正常運作而且檢查起來繁瑣,耗費大量的精力,前期學習可以借鑒同行的代碼加以完善,後期等技術能力達到一定的标準再去自己優化編寫代碼。下文就是通過Java語言程式設計的一個爬蟲程式,希望對小白使用者有一些幫助。

下面就上核心代碼:

public void crawling(String[] seeds) {

        //使用種子初始化 URL 隊列

        System.out.println("MyCrawler: 使用種子初始化 URL 隊列, 程式開始.");

        Links.addUnvisitedUrlQueue(seeds);

        //循環條件:是否 還有有效的待通路連結

        while (Links.hasUnVisitedUrlList()) {

            //先從待通路的序列中取出第一個

            String url = Links.fetchHeadOfUnVisitedUrlQueue();

            //将已經通路過的連結放入已通路的連結中;

            Links.addVisitedUrlSet(url);

            //根據URL得到page

            Page page = Requests.request(url);

            //對page進行解析:---- 解析DOM的某個标簽

            System.out.println("PageParserUtils: 解析頁面出頁面中所有的 a 标簽");

            Elements es = PageParserUtils.select(page, "a");

            es.stream().map(Element::toString).forEach(System.out::println);

            //對page進行解析:---- 得到新的連結

            System.out.println("PageParserUtils: 解析出所有的 img 标簽, 并得到 新連結 ");

            Set<String> links = PageParserUtils.getLinks(page, "img");

            // Links管理類 新增連結

            System.out.println("Links: 可以将解析出來的連結 添加到 待通路連結隊列中 ");

            links.stream().filter(link -> link.startsWith("http://www.baidu.com")).forEach(Links::addUnvisitedUrlQueue);

            //對page進行處理: 将儲存檔案

            System.out.println("Files: 将頁面儲存到本地");

            Files.saveToLocal(page);

        }

        System.out.println("MyCrawler: 所有的有效連結已通路結束, 程式退出.");

    }      
MyCrawler: 使用種子初始化 URL 隊列, 程式開始.

  Links: 新增爬取路徑: http://www.baidu.com

  Links: 取出待通路的url : http://www.baidu.com

  PageParserUtils: 解析頁面出頁面中所有的 a 标簽

  <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新聞</a>

  <a href="http://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>

  <a href="http://map.baidu.com" name="tj_trmap" class="mnav">地圖</a>

  <a href="http://v.baidu.com" name="tj_trvideo" class="mnav">視訊</a>

  <a href="http://tieba.baidu.com" name="tj_trtieba" class="mnav">貼吧</a>

  <a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1" name="tj_login" class="lb">登入</a>

  <a href="//www.baidu.com/more/" name="tj_briicon" class="bri" style="display: block;">更多産品</a>

  <a href="http://home.baidu.com">關于百度</a>

  <a href="http://ir.baidu.com">About Baidu</a>

  <a href="http://www.baidu.com/duty/">使用百度前必讀</a>

  <a href="http://jianyi.baidu.com/" class="cp-feedback">意見回報</a>

  PageParserUtils: 解析出所有的 img 标簽, 并得到 新連結  
  Links: 可以将解析出來的連結 添加到 待通路連結隊列中  
  Links: 新增爬取路徑: http://www.baidu.com/img/gs.gif

  Links: 新增爬取路徑: http://www.baidu.com/img/bd_logo1.png

  Files: 将頁面儲存到本地

  檔案:www.baidu.com.html已經被存儲在/G:/code/java/myself/learn/crawlLearn/target/classes/temp\www.baidu.com.html

  Links: 取出待通路的url : http://www.baidu.com/img/gs.gif

  PageParserUtils: 解析頁面出頁面中所有的 a 标簽

  PageParserUtils: 解析出所有的 img 标簽, 并得到 新連結  
  Links: 可以将解析出來的連結 添加到 待通路連結隊列中  
  Files: 将頁面儲存到本地

  檔案:www.baidu.com_img_gs.gif.gif已經被存儲在/G:/code/java/myself/learn/crawlLearn/target/classes/temp\www.baidu.com_img_gs.gif.gif

  Links: 取出待通路的url : http://www.baidu.com/img/bd_logo1.png

  PageParserUtils: 解析頁面出頁面中所有的 a 标簽

  PageParserUtils: 解析出所有的 img 标簽, 并得到 新連結  
  Links: 可以将解析出來的連結 添加到 待通路連結隊列中  
  Files: 将頁面儲存到本地

  檔案:www.baidu.com_img_bd_logo1.png.png已經被存儲在/G:/code/java/myself/learn/crawlLearn/target/classes/temp\www.baidu.com_img_bd_logo1.png.png

  MyCrawler: 所有的有效連結已通路結束, 程式退出.