一个网络爬虫java实现

一个网络爬虫java实现

ID:20192954

大小:131.50 KB

页数:11页

时间:2018-10-09

一个网络爬虫java实现_第1页
一个网络爬虫java实现_第2页
一个网络爬虫java实现_第3页
一个网络爬虫java实现_第4页
一个网络爬虫java实现_第5页
资源描述:

《一个网络爬虫java实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、http://www.cnblogs.com/FengYan/archive/2012/11/27/2788369.html#2566041 ZeroCrawlerV0.1是一只简单的多线程爬虫,其基本架构如下:   整个程序是这样运作的:Scheduler不断从Queue取出URL,如果发现可用的爬虫(空闲线程),那么就将URL分给一只爬虫。然后爬虫完成下载网页,抽取URL,保存网页的工作后就回归Scheduler(变回空闲线程)。直到Queue没有待爬取的URL,并且所有爬虫都空闲下来,就停止程序。   S

2、cheduler的主要工作就是建立线程池,从Queue中取出URL,分配URL给线程。容易出错的地方是退出条件。如果只是判断Queue为空就退出是不行的。因为这时可能还有爬虫在工作中,而它可能提取到新的URL加到Queue中。所以退出条件应该是Queue为空且线程池的线程全部空闲。Scheduler实现如下:ViewCodepublicstaticvoidCrawl(Stringurl,StringsavePath){intcnt=1;longstartTime=System.currentTimeMillis

3、();AtomicIntegernumberOfThreads=newAtomicInteger();//记录当前使用的爬虫数ThreadPoolExecutorexecutor=newThreadPoolExecutor(m_maxThreads,m_maxThreads,3,TimeUnit.SECONDS,newLinkedBlockingQueue());//建立线程池Queue.Add(UrlUtility.Encode(UrlUtility.Normalizer(url)));/

4、/添加初始URL到Queue中try{while((url=Queue.Fetch())!=null){executor.execute(newPageCrawler(url,savePath,numberOfThreads));//将URL交给爬虫while((Queue.Size()==0&&numberOfThreads.get()!=0)

5、

6、(numberOfThreads.get()==m_maxThreads)){//防止提前退出sleep();}//if(cnt++>1000)break;if(Q

7、ueue.Size()==0&&numberOfThreads.get()==0)break;}}finally{executor.shutdown();}longuseTime=System.currentTimeMillis()-startTime;System.out.println("use"+Utility.ToStandardTime((int)(useTime/1000))+"tofinish"+cnt+"links");System.out.println("remainurl:"+Queue.

8、Size());}   Queue负责保存URL,判断URL重复出现与否。目前的保存方式是先使用Hash判断URL是否已经保存过,然后再将完整的URL整个保存到list中。从Queue中取出URL时使用广度优先原则。ViewCodepublicclassQueue{privatestaticHashSetm_appear=newHashSet();privatestaticLinkedListm_queue=newLinkedList();publ

9、icsynchronizedstaticvoidAdd(Stringurl){if(!m_appear.contains(url)){m_appear.add(url);m_queue.addLast(url);}}publicsynchronizedstaticStringFetch(){if(!m_queue.isEmpty()){returnm_queue.poll();}returnnull;}publicstaticintSize(){returnm_queue.size();}}    接下来逐一介

10、绍爬虫最重要的几个功能,首先从获取网页开始。网页的获取分为两部分:一是下载网页,二是正解地对字节流进行编码。网页下载使用httpclient-4.2.2完成,具体如下:ViewCode//伪装用的agentprivatestaticString[]m_agent={"Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0)","Mozilla/4.0(c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。