Java网络爬虫的实现

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

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

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

#
java

  记得在刚找工作时,隔壁的一位同学在面试时豪言壮语曾实现过网络爬虫,当时的景仰之情犹如滔滔江水连绵不绝。后来,在做图片搜索时,需要大量的测试图片,因此萌生了从Amazon中爬取图书封面图片的想法,从网上也吸取了一些前人的经验,实现了一个简单但足够用的爬虫系统。

  网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成,其基本架构如下图所示:

  传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。对于垂直搜索来说,聚焦爬虫,即有针对性地爬取特定主题网页的爬虫,更为适合。

  本文爬虫程序的核心代码如下:

  Java代码

  • public void crawl() throws Throwable {     
  •     while (continueCrawling()) {     
  •         CrawlerUrl url = getNextUrl(); //获取待爬取队列中的下一个URL    
  •         if (url != null) {     
  •             printCrawlInfo();      
  •             String content = getContent(url); //获取URL的文本信息    
  •                  
  •             //聚焦爬虫只爬取与主题内容相关的网页,这里采用正则匹配简单处理    
  •             if (isContentRelevant(content, this.regexpSearchPattern)) {     
  •                 saveContent(url, content); //保存网页至本地    
  •     
  •                 //获取网页内容中的链接,并放入待爬取队列中    
  •                 Collection urlStrings = extractUrls(content, url);     
  •                 addUrlsToUrlQueue(url, urlStrings);     
  •             } else {     
  •                 System.out.println(url + " is not relevant ignoring ...");     
  •             }     
  •     
  •             //延时防止被对方屏蔽    
  •             Thread.sleep(this.delayBetweenUrls);     
  •         }     
  •     }     
  •     closeOutputStream();     
  • }
  •   整个函数由getNextUrl、getContent、isContentRelevant、extractUrls、addUrlsToUrlQueue等几个核心方法组成,下面将一一介绍。先看getNextUrl:

    31/3123>
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

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

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

    沪ICP备05003035号

    沪公网安备 31010102002173号