1.爬蟲概述
爬蟲又稱為網(wǎng)絡(luò)爬蟲,主要指代從互聯(lián)網(wǎng)是上進(jìn)行數(shù)據(jù)采集的腳本程序,是進(jìn)行數(shù)據(jù)分析和數(shù)據(jù)挖掘的基礎(chǔ)
爬蟲首先要做的工作就是獲取網(wǎng)頁源代碼,將源代碼獲取后提取其中的信息。爬蟲最通用的方法便是采用正則表達(dá)式提取,這是一個萬能的方法,但構(gòu)造正則表達(dá)式太過復(fù)雜且容易出錯,所以一般根據(jù)網(wǎng)頁節(jié)點(diǎn)屬性、css選擇器或者xpath來提取網(wǎng)頁的信息
提取信息后要做的就是保存數(shù)據(jù),以便后續(xù)使用。保存的形式多種多樣,可以簡單保存為TXT文本或者json文本,也可保存到數(shù)據(jù)庫或遠(yuǎn)程服務(wù)器,如借助sftp進(jìn)行操作等
2.會話和cookies
在瀏覽網(wǎng)站的過程中,經(jīng)常會需要登錄才能訪問,登錄后可以多次訪問但一定時間后可能會需要重新登錄,還有一些網(wǎng)站登錄后長時間都不會失效,這就涉及到了會話和cookies的相關(guān)內(nèi)容
2.1靜態(tài)網(wǎng)頁和動態(tài)網(wǎng)頁
靜態(tài)網(wǎng)頁編寫快,編寫簡單,但是存在很大的缺陷,如可維護(hù)性差,不能根據(jù)url靈活多變的顯示內(nèi)容。動態(tài)網(wǎng)站正是根據(jù)靜態(tài)網(wǎng)頁缺陷應(yīng)運(yùn)而生,彌補(bǔ)了靜態(tài)網(wǎng)頁的一些不足。它可以生成動態(tài)解析url中參數(shù)的變化,關(guān)聯(lián)數(shù)據(jù)庫并動態(tài)呈現(xiàn)不同的頁面內(nèi)容,非常靈活多變,其功能遠(yuǎn)遠(yuǎn)強(qiáng)于靜態(tài)網(wǎng)頁。
此外,動態(tài)網(wǎng)站還可以實(shí)現(xiàn)用戶登錄和注冊的功能。這些功能就涉及到了之前提到的會話和緩存了。會話在服務(wù)端,用來保存網(wǎng)站的服務(wù)器,用來保存用戶的會話信息,cookies在客戶端,它保存了登錄的憑證,有了它,只需要在下次請求攜帶cookies發(fā)送請求而不必重新輸入用戶名、密碼等信息重新登錄了。功能強(qiáng)大如斯,原理何如?且待一一道來:
1)會話:會話對象用來存儲特定用戶所需的屬性及配置信息。這樣,當(dāng)用戶在應(yīng)用程序的web頁之間跳轉(zhuǎn)時,存儲在會話對象的變量將不會丟失,而是在整個用戶會話中一直存在下去。當(dāng)用戶請求來自應(yīng)用程序的web時,如果該用戶還沒有會話,則web服務(wù)器將自動創(chuàng)建一個會話對象。當(dāng)會話過期或被放棄后,服務(wù)器將終止該會話
2)cookies:cookies指某些網(wǎng)站為了辨別用戶身份,進(jìn)行會話跟蹤而存儲在用戶本地終端上的數(shù)據(jù)
那么,我們怎樣利用 Cookies 保持狀態(tài)呢?當(dāng)客戶端第 次請求服務(wù)器時,服務(wù)器會返回個請求頭中帶有 Set-Cookie 字段的響應(yīng)給客戶端,用來標(biāo)記是哪一個用戶,客戶端瀏覽器會把 Cookies 存起來當(dāng)瀏覽器下一次再請求該網(wǎng)站時瀏覽器會把 Cookies 放到請求頭 起提交給服務(wù)器 “ Cookies 攜帶了會話 ID 信息,服務(wù)器檢查該 Cookies 即可找到對應(yīng)的會話是什么,然后再判斷會話來以此來辨認(rèn)用戶狀態(tài)
在成功登錄某個網(wǎng)站時,服務(wù)器會告訴客戶端設(shè)置哪些 ookies 信息,在后續(xù)訪問頁面時客戶端會把 Cookies 發(fā)送給服務(wù)器,服務(wù)器再找到對應(yīng)的會話加以判斷 如果會話中的某些設(shè)置登錄狀態(tài)的變量是有效的,那就證明用戶處于登錄狀態(tài),此時返回登錄之后才可以查看的網(wǎng)頁內(nèi)容,瀏覽器再進(jìn)行解析便可以看到了
反之,如果傳給服務(wù)器的 Cookies 是無效的,或者會話已經(jīng)過期了,我們將不能繼續(xù)訪問頁面,
此時可能會收到錯誤的響應(yīng)或者跳轉(zhuǎn)到登錄頁面重新登錄
因此,會話跟cookies需要配合,一個處于客戶端,一個處于服務(wù)端,二者共同協(xié)作,就實(shí)現(xiàn)了登錄會話控制
3.爬蟲的分類及代理
3.1爬蟲的分類
根據(jù)項目中的使用情況進(jìn)行區(qū)分,主要分為兩大類型:通用爬蟲和聚焦爬蟲
根據(jù)采集數(shù)據(jù)的過程進(jìn)行區(qū)分,可分為:累積爬蟲和增量爬蟲
通用爬蟲:通用爬蟲是做常見的數(shù)據(jù)采集程序,是網(wǎng)絡(luò)上搜索引擎使用的腳本程序。通用爬蟲采集的數(shù)據(jù)具有普遍性,針對性較差,但是它的重用性較高。一旦開發(fā)調(diào)試完成,可以長時間運(yùn)行給搜索引擎提供需要的數(shù)據(jù)
增量爬蟲:目標(biāo)數(shù)據(jù)在需求更改的過程中,可能隨時發(fā)生變化,歷史數(shù)據(jù)的變動和新增數(shù)據(jù)都被稱為增量,所以針對此類數(shù)據(jù)采集的爬蟲程序,稱為增量爬蟲。增量爬蟲的特點(diǎn)就是在采集數(shù)據(jù)的過程中隨時更新歷史數(shù)據(jù)的同時采集新增數(shù)據(jù)。與通用爬蟲一樣適用于搜索引擎
聚焦爬蟲:聚焦爬蟲是數(shù)據(jù)供應(yīng)商企業(yè)使用最多的爬蟲程序,通常情況針對指定范圍的數(shù)據(jù)進(jìn)行定向的數(shù)據(jù)采集和篩選,能在一定時間內(nèi)最大限度的采集企業(yè)需要的有效的數(shù)據(jù)。針對性較高,需要獨(dú)立開發(fā)爬蟲程序進(jìn)行數(shù)據(jù)采集,但重用性較差
累積爬蟲:目標(biāo)數(shù)據(jù)一旦生成,不會發(fā)生改動,隨著時間的延伸數(shù)據(jù)量逐漸增大,采集并保存歷史數(shù)據(jù)之后針對新生成的數(shù)據(jù)進(jìn)行進(jìn)一步獲取,采集過程中會不斷更新歷史數(shù)據(jù)
#######3.2 為什么要使用爬蟲
爬蟲的作用是從網(wǎng)站上采集數(shù)據(jù),目前市面上流行的下載工具比比皆是,使用爬蟲的優(yōu)勢和使用場景的目的性一定要明確。
優(yōu)勢:將下載數(shù)據(jù)的過程通過編寫的程序?qū)崿F(xiàn)自動化批量處理,但是自動化有兩個前提條件:需要編寫程序、可以批量處理
使用場景:
采集數(shù)據(jù)之前,對目標(biāo)數(shù)據(jù)進(jìn)行分析,并編寫程序代碼
目標(biāo)數(shù)據(jù)是批量數(shù)據(jù),批量數(shù)據(jù)有自己的組成規(guī)律
注意事項:爬蟲在一定程度上備受爭議,聚焦爬蟲在短時間內(nèi)更是會造成目標(biāo)數(shù)據(jù)所在服務(wù)器短時間的壓力上升。爬蟲程序由于程序本身的特殊性,在一定程度上可能引發(fā)一些對網(wǎng)站造成惡意攻擊的行為。且爬蟲在采集數(shù)據(jù)的過程中對于數(shù)據(jù)的涉密性區(qū)分不是很嚴(yán)格,主要靠人工智能手段進(jìn)行篩選操作,所以在爬蟲過程中需注意一下問題:
爬蟲采集的目標(biāo)數(shù)據(jù)量進(jìn)行分析
爬蟲采集的目標(biāo)數(shù)據(jù)涉密性進(jìn)行分析
爬蟲采集目標(biāo)數(shù)據(jù)的頻率進(jìn)行分析
3.3 爬蟲代理
對于爬蟲來說,由于爬蟲爬取的速度較快,在爬取的過程中可能會遇到同一個IP訪問過于頻繁的問題,此時網(wǎng)站就會讓我們輸入驗(yàn)證碼登錄或者直接封鎖IP,給爬蟲帶來極大的不便
使用代理隱藏真實(shí)的IP,讓服務(wù)器誤以為代理服務(wù)器在請求自己,這樣在爬取的過程中不斷更換代理,就不會被封鎖,可以達(dá)到很好的爬取效果
代理的分類:代理時,可以根據(jù)協(xié)議區(qū)分,也可以根據(jù)其匿名程度區(qū)分
1)根據(jù)協(xié)議區(qū)分
FTP代理服務(wù)器:主要用于訪問FTP服務(wù)器,一般有上傳、下載以及緩存功能,端口一般為21、2121等
HTTP代理服務(wù)器:主要用于訪問網(wǎng)頁,一般有內(nèi)容過濾和緩存功能,端口一般為80、8080、3128等
SSL/TLS代理:主要用于訪問加密網(wǎng)站,一般有SSL或TLS加密功能,端口一般為443
RTSP代理:主要用于訪問real流媒體服務(wù)器,一般有緩存功能,端口一般為554
Telnet代理:主要用于Telnet遠(yuǎn)程控制,端口一般為23
POP3/SMPT代理:主要用于POP3/SMTP方式收發(fā)郵件,一般有緩存功能,端口一般為110/25
SOCKS代理:只是單純傳遞數(shù)據(jù)包,不關(guān)心具體協(xié)議和用法,所以速度快很多,一般有緩存功能,端口一般為1080
2)根據(jù)匿名程度區(qū)分
高度匿名代理:會將數(shù)據(jù)包原封不動的轉(zhuǎn)發(fā),在服務(wù)端看來就好像真的是一個普通客戶端在訪問,而記錄的IP是代理服務(wù)器的IP
普通匿名代理:會在數(shù)據(jù)包上做一些改動,服務(wù)端上有可能發(fā)現(xiàn)這是個代理服務(wù)器,也有一定幾率查到客戶端的真實(shí)IP,。代理服務(wù)器通常會加入的HTTP頭有HTTP_VIA和HTTP_X_FORWARDED_FOR
透明代理:不但改動了數(shù)據(jù)包,還會告訴服務(wù)器客戶端的真實(shí)IP,這種代理除了能用緩存技術(shù)提高瀏覽器速度,能用內(nèi)容過濾提高安全性之外,并無其他顯著作用,最常見的例子就是內(nèi)網(wǎng)中的硬件防火墻
間諜代理:指組織或個人創(chuàng)建的用于記錄用戶傳輸?shù)臄?shù)據(jù),然后進(jìn)行研究、監(jiān)控等目的的代理服務(wù)器