一個(gè)網(wǎng)絡(luò)爬蟲(chóng)java實(shí)現(xiàn)

一個(gè)網(wǎng)絡(luò)爬蟲(chóng)java實(shí)現(xiàn)

ID:20192954

大?。?31.50 KB

頁(yè)數(shù):11頁(yè)

時(shí)間:2018-10-09

一個(gè)網(wǎng)絡(luò)爬蟲(chóng)java實(shí)現(xiàn)_第1頁(yè)
一個(gè)網(wǎng)絡(luò)爬蟲(chóng)java實(shí)現(xiàn)_第2頁(yè)
一個(gè)網(wǎng)絡(luò)爬蟲(chóng)java實(shí)現(xiàn)_第3頁(yè)
一個(gè)網(wǎng)絡(luò)爬蟲(chóng)java實(shí)現(xiàn)_第4頁(yè)
一個(gè)網(wǎng)絡(luò)爬蟲(chóng)java實(shí)現(xiàn)_第5頁(yè)
資源描述:

《一個(gè)網(wǎng)絡(luò)爬蟲(chóng)java實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、http://www.cnblogs.com/FengYan/archive/2012/11/27/2788369.html#2566041?ZeroCrawlerV0.1是一只簡(jiǎn)單的多線(xiàn)程爬蟲(chóng),其基本架構(gòu)如下:???整個(gè)程序是這樣運(yùn)作的:Scheduler不斷從Queue取出URL,如果發(fā)現(xiàn)可用的爬蟲(chóng)(空閑線(xiàn)程),那么就將URL分給一只爬蟲(chóng)。然后爬蟲(chóng)完成下載網(wǎng)頁(yè),抽取URL,保存網(wǎng)頁(yè)的工作后就回歸Scheduler(變回空閑線(xiàn)程)。直到Queue沒(méi)有待爬取的URL,并且所有爬蟲(chóng)都空閑下來(lái),就停止程序。???S

2、cheduler的主要工作就是建立線(xiàn)程池,從Queue中取出URL,分配URL給線(xiàn)程。容易出錯(cuò)的地方是退出條件。如果只是判斷Queue為空就退出是不行的。因?yàn)檫@時(shí)可能還有爬蟲(chóng)在工作中,而它可能提取到新的URL加到Queue中。所以退出條件應(yīng)該是Queue為空且線(xiàn)程池的線(xiàn)程全部空閑。Scheduler實(shí)現(xiàn)如下:ViewCodepublicstaticvoidCrawl(Stringurl,StringsavePath){intcnt=1;longstartTime=System.currentTimeMillis

3、();AtomicIntegernumberOfThreads=newAtomicInteger();//記錄當(dāng)前使用的爬蟲(chóng)數(shù)ThreadPoolExecutorexecutor=newThreadPoolExecutor(m_maxThreads,m_maxThreads,3,TimeUnit.SECONDS,newLinkedBlockingQueue());//建立線(xiàn)程池Queue.Add(UrlUtility.Encode(UrlUtility.Normalizer(url)));/

4、/添加初始URL到Queue中try{while((url=Queue.Fetch())!=null){executor.execute(newPageCrawler(url,savePath,numberOfThreads));//將URL交給爬蟲(chóng)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負(fù)責(zé)保存URL,判斷URL重復(fù)出現(xiàn)與否。目前的保存方式是先使用Hash判斷URL是否已經(jīng)保存過(guò),然后再將完整的URL整個(gè)保存到list中。從Queue中取出URL時(shí)使用廣度優(yōu)先原則。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();}}????接下來(lái)逐一介

10、紹爬蟲(chóng)最重要的幾個(gè)功能,首先從獲取網(wǎng)頁(yè)開(kāi)始。網(wǎng)頁(yè)的獲取分為兩部分:一是下載網(wǎng)頁(yè),二是正解地對(duì)字節(jié)流進(jìn)行編碼。網(wǎng)頁(yè)下載使用httpclient-4.2.2完成,具體如下:ViewCode//偽裝用的agentprivatestaticString[]m_agent={"Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0)","Mozilla/4.0(c

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。