1.1?爬蟲定義
爬蟲是一個(gè)抓取網(wǎng)頁的計(jì)算機(jī)程序,它在互聯(lián)網(wǎng)中漫游,發(fā)現(xiàn)和搜集信息。日夜不停地運(yùn)行,盡可能多、盡可能快地搜集各種類型的新信息,同時(shí)因?yàn)榛ヂ?lián)網(wǎng)上的信息更新很快,所以還要定期更新已經(jīng)搜集過的舊信息,以避免死連接和無效連接。
1.2?第一個(gè)爬蟲
RBSE?(Eichmann,1994)是第一個(gè)發(fā)布的爬蟲。它有兩個(gè)基礎(chǔ)程序。第一個(gè)是“spider”,抓取隊(duì)列中的內(nèi)容到一個(gè)關(guān)系數(shù)據(jù)庫中,第二個(gè)程序是“mite”,是一個(gè)修改后的www的ASCII瀏覽器,負(fù)責(zé)從網(wǎng)絡(luò)上下載頁面。?
1.3?日常生活接觸
Baiduspider,?Googlebot。
1.4?爬蟲組成
網(wǎng)絡(luò)爬蟲主要由控制器,解析器,資源庫組成。
中央控制器:根據(jù)系統(tǒng)傳過來的URL鏈接,分配一線程,啟動(dòng)線程調(diào)用爬蟲爬取網(wǎng)頁。
解析器:是爬蟲的主要部分,負(fù)責(zé)下載網(wǎng)頁,對(duì)網(wǎng)頁的文本進(jìn)行處理,如過濾功能,抽取特殊HTML標(biāo)簽的功能,分析數(shù)據(jù)功能。
資源庫:主要是用來存儲(chǔ)網(wǎng)頁中下載下來的數(shù)據(jù)記錄的容器,并提供生成索引的目標(biāo)源。中大型的數(shù)據(jù)庫產(chǎn)品有:Oracle、Sql?Server等。
1.5?爬蟲類型
一般分傳統(tǒng)爬蟲和聚集爬蟲。
(1)傳統(tǒng)爬蟲,從一個(gè)或若干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL,抓取之后,通過源碼解析來獲得想要的內(nèi)容。
(2)聚焦爬蟲:根據(jù)一定的網(wǎng)頁分析算法過濾與主題無關(guān)的鏈接,重復(fù)上述過程,直到達(dá)到系統(tǒng)的某一條件時(shí)停止所有被爬蟲抓取的網(wǎng)頁將會(huì)被系統(tǒng)存貯。
抓取對(duì)象:靜態(tài)網(wǎng)頁、文件對(duì)象、動(dòng)態(tài)網(wǎng)頁、特殊內(nèi)容。
特殊內(nèi)容:比如RSS、XML數(shù)據(jù),情況特殊需特殊處理。如新聞的滾動(dòng)新聞頁面,需要爬蟲不停地監(jiān)控掃描,發(fā)現(xiàn)新內(nèi)容馬上就進(jìn)行抓取。
使用爬蟲的代價(jià)包括:
(1)網(wǎng)絡(luò)資源:在很長(zhǎng)一段時(shí)間,爬蟲使用相當(dāng)?shù)膸捀叨炔⑿械毓ぷ鳌?/span>
(2)服務(wù)器超載:尤其是對(duì)給定服務(wù)器的訪問過高時(shí)。
(3)邏輯糟糕的爬蟲,可能導(dǎo)致服務(wù)器或者路由器癱瘓,或者會(huì)嘗試下載自己無法處理的頁面。?
個(gè)人爬蟲,如果過多的人使用,可能導(dǎo)致網(wǎng)絡(luò)或者服務(wù)器阻塞。
樂思網(wǎng)絡(luò)信息采集系統(tǒng)比網(wǎng)絡(luò)爬蟲的功能更加強(qiáng)大,它能夠采集新聞、論壇、微博、微信等媒介上的信息,可以這樣說,只要是互聯(lián)網(wǎng)上公開可見的信息,我們的系統(tǒng)都可以采集。樂思采集軟件系的主要功能是批量而精確地將互聯(lián)網(wǎng)目標(biāo)網(wǎng)頁中的半結(jié)構(gòu)化數(shù)據(jù)抽取為結(jié)構(gòu)化的記錄,保存在本地?cái)?shù)據(jù)庫中,以便進(jìn)一步分析使用。
新鮮度和過時(shí)性
爬蟲的目標(biāo)是盡可能高的提高頁面的新鮮度
同時(shí)降低頁面的過時(shí)性
5.1?一般抓取方法:
(1)從一個(gè)起始URL集合開始,以一定的規(guī)則循環(huán)在互聯(lián)網(wǎng)中發(fā)現(xiàn)信息。這些起始URL可以是任意的URL,但常常是一些非常流行、包含很多鏈接的站點(diǎn)(如Yahoo?。?/span>
(2)劃分:將Web空間按照域名、IP地址或國(guó)家域名劃分,每個(gè)搜索器負(fù)責(zé)一個(gè)子空間的窮盡搜索。
5.2?抓取策略
網(wǎng)頁的抓取策略可以分為深度優(yōu)先、廣度優(yōu)先和最佳優(yōu)先三種。
深度優(yōu)先在很多情況下會(huì)導(dǎo)致爬蟲的陷入(trapped)問題。
目前常見的是廣度優(yōu)先和最佳優(yōu)先方法。
5.3?策略選擇
(1)選擇策略,決定所要下載的頁面;
①重新訪問策略,決定什么時(shí)候檢查頁面的更新變化;
②?平衡禮貌策略,指出怎樣避免站點(diǎn)超載;
②并行策略,指出怎么協(xié)同達(dá)到分布式抓取的效果;
(2)提示:為了獲取更好的抓取策略,更多有關(guān)網(wǎng)頁質(zhì)量的信息應(yīng)該考慮進(jìn)去。
5.4?注意事項(xiàng)
爬蟲開發(fā)的主要問題是性能和反封鎖。
很多時(shí)候,采用高并發(fā)高頻率抓取數(shù)據(jù)是可行的,前提是目標(biāo)站點(diǎn)沒有采用任何反爬措施(訪問頻率限制、防火墻、驗(yàn)證碼……)。
更多時(shí)候,有價(jià)值的信息,一定伴隨著嚴(yán)格的反爬措施,一旦ip被封,什么組件都沒戲了。?
Robots協(xié)議
Robots協(xié)議(也稱為爬蟲協(xié)議、機(jī)器人協(xié)議等),
全稱是“網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)”(Robots?Exclusion?Protocol),
網(wǎng)站通過Robots協(xié)議告訴搜索引擎哪些頁面可以抓取,
哪些頁面不能抓取。
.htaccess文件是Apache服務(wù)器中的一個(gè)配置文件,它負(fù)責(zé)相關(guān)目錄下的網(wǎng)頁配置。
通過htaccess文件,可以幫我們實(shí)現(xiàn):網(wǎng)頁301重定向、自定義404錯(cuò)誤頁面、改變文件擴(kuò)展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認(rèn)文檔等功能。
HTTP狀態(tài)碼通常分為5種類型,分別以1~5五個(gè)數(shù)字開頭,由3位整數(shù)組成:
200:請(qǐng)求成功??????處理方式:獲得響應(yīng)的內(nèi)容,進(jìn)行處理?
201:請(qǐng)求完成,結(jié)果是創(chuàng)建了新資源。新創(chuàng)建資源的URI可在響應(yīng)的實(shí)體中得到????處理方式:爬蟲中不會(huì)遇到?
202:請(qǐng)求被接受,但處理尚未完成????處理方式:阻塞等待?
204:服務(wù)器端已經(jīng)實(shí)現(xiàn)了請(qǐng)求,但是沒有返回新的信?息。如果客戶是用戶代理,則無須為此更新自身的文檔視圖。????處理方式:丟棄
300:該狀態(tài)碼不被HTTP/1.0的應(yīng)用程序直接使用,?只是作為3XX類型回應(yīng)的默認(rèn)解釋。存在多個(gè)可用的被請(qǐng)求資源。????處理方式:若程序中能夠處理,則進(jìn)行進(jìn)一步處理,如果程序中不能處理,則丟棄301:請(qǐng)求到的資源都會(huì)分配一個(gè)永久的URL,這樣就可以在將來通過該URL來訪問此資源????處理方式:重定向到分配的URL302:請(qǐng)求到的資源在一個(gè)不同的URL處臨時(shí)保存?????處理方式:重定向到臨時(shí)的URL?
304?請(qǐng)求的資源未更新?????處理方式:丟棄?
400?非法請(qǐng)求?????處理方式:丟棄?
401?未授權(quán)?????處理方式:丟棄?
403?禁止?????處理方式:丟棄?
404?沒有找到?????處理方式:丟棄
5XX?回應(yīng)代碼以“5”開頭的狀態(tài)碼表示服務(wù)器端發(fā)現(xiàn)自己出現(xiàn)錯(cuò)誤,不能繼續(xù)執(zhí)行請(qǐng)求????處理方式:丟棄