[wbia 1]表示web based information architecture作業1的第1部分,搜索到這篇日志的讀者可以直接忽略之。
我對heritrix的了解較淺,希望此文對第一次用爬蟲的程序猿有幫助。如果有什么錯誤請直接留言指正,不勝感激。
heritrix是個開源爬蟲,可以比較自由的配置爬取過程。heritrix可以獲取完整的、精確的、站點內容的深度復制。包括獲取圖像以及其他非文本內容。抓取並存儲相關的內容。對內容來者不拒,不對頁面進行內容上的修改。重新爬行對相同的URL不針對先前的進行替換。爬蟲通過Web用戶界面啟動、監控、調整,允許彈性的定義要獲取的URL。
一、關於安裝和運行(部分內容轉自 http://blessed24.iteye.com/blog/969777 )
1. 下載:到www.sourceforge.net網站搜索heritrix,然后下載下來heritrix-1.14.4-RC1.zip
2. 安裝
(1).解壓heritrix-1.14.4-RC1.zip,假設解壓到了c盤根目錄下並把解壓后的文件夾命名為heritrix
(2).進入c:\heritrix\conf復制文件jmxremote.password.template到c:\heritrix下並把文件重新命名為jmxremote.password,
然后修改其內容為下:
monitorRole @123456789@ ->monitorRole admin (@於@之間設置的是密碼,后面是->用戶角色用戶名)
controlRole @123456789@ ->controlRole shi
並設置文件jmxremote.password的屬性為只讀
(3).進入c:\heritrix\conf打開文件heritrix.properties,修改其中的幾項key-value值
heritrix.cmdline.admin = admin:770629 (用戶名:密碼)
heritrix.cmdline.port = 8080 (heritrix服務器默認端口號8080,保證該端口不被占用就不用改了)
(4).打開cmd,切換目錄到c:\heritrix\bin
然后敲入命令:heritrix --admin=admin:123456789
由於heritrix是開源軟件,如果需要更復雜的改動,可以搜索並下載其源碼heritrix-1.14.0-RC1-src.zip,並參見 http://blessed24.iteye.com/blog/969777 進行Eclipse的配置。heritrix的配置比較靈活,暫時無需修改源碼。
二、關於抓取前配置
1. 進行完“一”之后,即可用過瀏覽器訪問heritrix的交互界面,如果是在本機配置的,訪問網址http://127.0.0.1:8080,如果配置在服務器上,可以訪問服務器的ip+端口號。
2.開始一個簡單的抓取任務(部分內容轉自 http://www.iteye.com/topic/84206 )
(1) WUI的上邊的導航欄選擇"Jobs",呈現的第一項是"Create New Job",選擇第四小項"With defaults"。輸入項的前兩項Name和Description隨意,Seeds非常重要:http://www.baidu.com/注意最后一個反斜杠必須。
(2) 選擇下邊的"Modules",進入Module配置頁(Heritrix的擴展功能都是通過模塊概念實現的,可以實現自己的模塊完成自己想要的功能)。其中第一項 "Select Crawl Scope" 使用默認的 "org.archive.crawler.deciderules.DecidingScope"。倒數第三項 "Select Writers" 刪除默認的 "org.archive.crawler.writer.ARCWriterProcessor" ,后添加"org.archive.crawler.writer.MirrorWriterProcessor",這樣執行任務的時候抓取到的頁面會以鏡像的方式放在本地的目錄結構中,而不是生成ARC存檔文件。
(3) 選擇"Modules"右邊的"Submodules",在第一項內容中 "crawl-order ->scope->decide-rules->rules" 刪除掉其中的 "acceptIfTranscluded" (org.archive.crawler.deciderules.TransclusionDecideRule) 的這一項抓取作用域的規則。否則當Http請求返回301或者302時Heritrix會去抓取其他域下的網頁。
(4) 在WUI的第二行導航欄中選擇"Settings"進入Job的配置頁面,其中主要修改兩項:http-headers 下的user-agent 和from,他們的"PROJECT_URL_HERE" 和 "CONTACT_EMAIL_ADDRESS_HERE" 替換為自己的內容("PROJECT_URL_HERE" 要以 "http://" 開頭)
(5) 在WUI的第二行導航欄中選擇最右邊的"Submit job"
(6) 在WUI的第一行導航欄中選擇第一項的"Console",點擊"Start",抓取任務正式開始,時間長短有網絡狀況和所抓取網站的深度有關。
3. 個性化配置
(1).域名正則表達式
我們的任務是抓取pku深研院以及其下屬的系、所、中心的網頁。用上面方法抓取存在一個問題,不能抓取非pkusz.edu.cn域名下的系、所、中心。而如果放開域名限制,那么就會抓出北大深研院這個范圍。這時候需要用正則表達式進行篩選。我的做法是這樣的,Modules中選擇org.archive.crawler.deciderules.DecidingScope,然后在Submodule的rules中選擇org.archive.crawler.deciderules.MatchesListRegExpDecideRule,其他全部刪掉。在setting中的regexp-list中,增加五個正則表達式,.*szpku.* .*pnbs.pku.* .*stl.pku.* .*pkusz.* .*szcie.pku.*,注意這里,java的正則表達式的通配符是.*,而不是*。另外,module以及submodule的選擇,會影響setting里的內容,選擇了相應的module,才有相應的setting。
(2).限制抓取文件類型
大部分時間我們關心的是網頁的文本,所以不太希望抓進來一堆圖片、視頻、壓縮包什么的,所以需要限制下。在submodule中,添加org.archive.crawler.deciderules.MatchesFilePatternDecideRule,對於每個submodule的含義,可以通過點擊旁邊的問號得知。這個Submodule的作用就是在接受文件的時候,接受不是某幾個類型的文件。在setting中設置,accept all,表示接受所有不是以下類型的文件:
Images: .bmp, .gif, .jp(e)g, .png, .tif(f)
Audio: .mid, mp2, .mp3, .mp4, .wav
Video: .avi, .mov, .mpeg, .ram, .rm, .smil, .wmv
Miscellaneous: .doc, .pdf, .ppt, .swf
這樣,抓取得到的鏡像會小很多。
(3). 修改編碼類型
抓到中文的時候,可能會顯示亂碼,需要修改下編碼格式。在setting中搜索到encoding,在空中填寫UTF-8。
三、關於抓取過程
整個抓取過程持續了三天多,不過大部分的網頁是在第一個晚上抓的。由於爬蟲在不停的填充隊列,所以越到后來抓的越慢,再就是我猜測可能是后來鏈接比較深的url是比較少訪問到的url,同時訪問速度也是比較慢的。第一個晚上抓到了90%,剩下的將近三天只抓取到95%,實在等不到,就將其停止了。總共鏡像抓了5.31G,有三十多萬個文件。應該算比較多的了,日志有1.27G。看了下,應該都是深研院的網站,到此抓取算告一段落了,下一步開始計算pagerank。