Java网络爬虫的实现

发表于:2011-3-10 09:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:grunt1223    来源:51Testing软件测试网采编

分享:

  extractUrls的主要作用,是从网页中获取更多的URL,包括内部链接和外部链接,代码如下:

  Java代码

  • public List extractUrls(String text, CrawlerUrl crawlerUrl) {     
  •     Map urlMap = new HashMap();     
  •     extractHttpUrls(urlMap, text);     
  •     extractRelativeUrls(urlMap, text, crawlerUrl);     
  •     return new ArrayList(urlMap.keySet());     
  • }     
  •     
  • //处理外部链接     
  • private void extractHttpUrls(Map urlMap, String text) {     
  •     Matcher m = httpRegexp.matcher(text);     
  •     while (m.find()) {     
  •         String url = m.group();     
  •         String[] terms = url.split("a href=\"");     
  •         for (String term : terms) {     
  •             // System.out.println("Term = " + term);     
  •             if (term.startsWith("http")) {     
  •                 int index = term.indexOf("\"");     
  •                 if (index > 0) {     
  •                     term = term.substring(0, index);     
  •                 }     
  •                 urlMap.put(term, term);     
  •                 System.out.println("Hyperlink: " + term);     
  •             }     
  •         }     
  •     }     
  • }     
  •     
  • //处理内部链接     
  • private void extractRelativeUrls(Map urlMap, String text,     
  •         CrawlerUrl crawlerUrl) {     
  •     Matcher m = relativeRegexp.matcher(text);     
  •     URL textURL = crawlerUrl.getURL();     
  •     String host = textURL.getHost();     
  •     while (m.find()) {     
  •         String url = m.group();     
  •         String[] terms = url.split("a href=\"");     
  •         for (String term : terms) {     
  •             if (term.startsWith("/")) {     
  •                 int index = term.indexOf("\"");     
  •                 if (index > 0) {     
  •                     term = term.substring(0, index);     
  •                 }     
  •                 String s = "http://" + host + term;     
  •                 urlMap.put(s, s);     
  •                 System.out.println("Relative url: " + s);     
  •             }     
  •         }     
  •     }     
  •     
  • }
  •   如此,便构建了一个简单的网络爬虫程序,可以使用以下程序来测试它:

      Java代码

  • public static void main(String[] args) {     
  •     try {     
  •         String url = "http://www.amazon.com";     
  •         Queue urlQueue = new LinkedList();     
  •         String regexp = "java";     
  •         urlQueue.add(new CrawlerUrl(url, 0));     
  •         NaiveCrawler crawler = new NaiveCrawler(urlQueue, 1005, 1000L,     
  •                 regexp);     
  •         // boolean allowCrawl = crawler.areWeAllowedToVisit(url);     
  •         // System.out.println("Allowed to crawl: " + url + " " +     
  •         // allowCrawl);     
  •         crawler.crawl();     
  •     } catch (Throwable t) {     
  •         System.out.println(t.toString());     
  •         t.printStackTrace();     
  •     }     
  • }
  •   当然,你可以为它赋予更为高级的功能,比如多线程、更智能的聚焦、结合Lucene建立索引等等。更为复杂的情况,可以考虑使用一些开源的蜘蛛程序,比如Nutch或是Heritrix等等,就不在本文的讨论范围了。

    33/3<123
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号