爬虫技术基础
“?爬蟲(chóng)的簡(jiǎn)單介紹。”
爬蟲(chóng),即spider,是一種按一定規(guī)則,自動(dòng)從網(wǎng)絡(luò)上抓取并提取特定信息的程序或者腳本。
互聯(lián)網(wǎng)絡(luò),浩瀚無(wú)際,頁(yè)面紛繁,包羅萬(wàn)象,直接導(dǎo)致信息的過(guò)載,人無(wú)法用雙手雙眼,從中提取我們感興趣有價(jià)值的內(nèi)容。信息處理自動(dòng)化的迫切需求導(dǎo)致了爬蟲(chóng)的產(chǎn)生和廣泛應(yīng)用。
對(duì)協(xié)議的分析還原而言,不僅僅是從流量中分析特定的數(shù)據(jù),我們的眼光,應(yīng)更具前瞻性,被動(dòng)地分析流量,工作永遠(yuǎn)無(wú)止境,使用爬蟲(chóng)技術(shù),能極大地增強(qiáng)協(xié)議分析還原的格局與格調(diào),同時(shí),也是提升協(xié)議還原系統(tǒng)數(shù)據(jù)處理能力的有效手段。在協(xié)議還原領(lǐng)域,智能化,自動(dòng)化,不僅僅是口號(hào),而是時(shí)時(shí)刻刻的需求,爬蟲(chóng),是手段之一,是系統(tǒng)提升的必經(jīng)之路。
本文對(duì)爬蟲(chóng)的原理和基礎(chǔ)進(jìn)行簡(jiǎn)單的介紹,后續(xù)將會(huì)有文章對(duì)爬蟲(chóng)技術(shù)進(jìn)行實(shí)戰(zhàn)演練,各位可提早學(xué)習(xí)爬蟲(chóng)中廣泛使用的語(yǔ)言之一,如Python,以便同步實(shí)戰(zhàn)。
01
—
基本原理
一般來(lái)說(shuō),爬蟲(chóng)是從特定網(wǎng)頁(yè)開(kāi)始,獲取頁(yè)面上的URL,然后加入爬取隊(duì)列,一直循環(huán)直至滿足特定停止條件。隨著進(jìn)化,新的爬蟲(chóng)種類出現(xiàn),它帶有特定任務(wù),也是從特定頁(yè)面開(kāi)始,但會(huì)對(duì)網(wǎng)頁(yè)內(nèi)容進(jìn)行深入分析,僅抓取符合特定條件的URL內(nèi)的數(shù)據(jù),并對(duì)符合要求的數(shù)據(jù)進(jìn)行存儲(chǔ),直至系統(tǒng)達(dá)到特定條件停止。
從上述描述可知,一般的爬蟲(chóng)會(huì)包括如下幾個(gè)部分:網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求及流程控制、內(nèi)容分析提取、有效數(shù)據(jù)存儲(chǔ)。
通常,爬蟲(chóng)的實(shí)現(xiàn),需要了解網(wǎng)站或者APP的架構(gòu)和邏輯,然后根據(jù)頁(yè)面的相關(guān)信息,進(jìn)行動(dòng)態(tài)的數(shù)據(jù)構(gòu)造和收發(fā)。
我們這里討論的爬蟲(chóng),是對(duì)特定數(shù)據(jù)進(jìn)行爬取的爬蟲(chóng)。
一個(gè)最簡(jiǎn)單的爬蟲(chóng)實(shí)現(xiàn),我們可以借助wget庫(kù),使用批處理程序,來(lái)對(duì)特定網(wǎng)站的特定頁(yè)面,如金采網(wǎng)這類政府網(wǎng)站內(nèi)的通知公告等信息的爬取,不需要復(fù)雜的技術(shù)。
02
—
技術(shù)現(xiàn)狀
爬蟲(chóng)是用編程語(yǔ)言實(shí)現(xiàn)的,同時(shí),會(huì)借助各種工具,目前,在網(wǎng)絡(luò)中流行廣泛被用于爬蟲(chóng)編寫(xiě)的語(yǔ)言是python,它有很多庫(kù)可供使用,例如,BeautifulSoup、scrapy等。
在一些特定的系統(tǒng)中,會(huì)使用C/C++作為編程語(yǔ)言,來(lái)實(shí)現(xiàn)特定任務(wù)的爬蟲(chóng)。
還有些人,會(huì)使用java等語(yǔ)言來(lái)實(shí)現(xiàn)爬蟲(chóng)。
總之,哪個(gè)語(yǔ)言對(duì)實(shí)現(xiàn)所需的爬蟲(chóng)效率最高,我們就選擇相應(yīng)的語(yǔ)言來(lái)實(shí)現(xiàn)爬蟲(chóng)。
目前,爬蟲(chóng)基本上都是對(duì)網(wǎng)站進(jìn)行爬取,即主要進(jìn)行HTTP/HTTPS的操作,當(dāng)然,還有小眾的爬蟲(chóng),對(duì)一些APP的內(nèi)容進(jìn)行爬取,這些,除HTTP/HTTPS操作外,還有部分TCP/UDP的操作,稍微復(fù)雜點(diǎn)。
對(duì)各類數(shù)據(jù)的爬取,需要模擬特定場(chǎng)景,如瀏覽器訪問(wèn),APP訪問(wèn)等,模仿得越逼真,爬取效果會(huì)越好。
我們的爬蟲(chóng),一般在PC上,滿足特定的條件,即可運(yùn)行,更多的是運(yùn)行在VPS或者服務(wù)器上。
03
—
學(xué)習(xí)前提
HTTP請(qǐng)求及響應(yīng)
HTTP是互聯(lián)網(wǎng)的基礎(chǔ),一個(gè)HTTP對(duì)由一個(gè)請(qǐng)求和一個(gè)響應(yīng)組成,請(qǐng)求和響應(yīng)都分成HTTP頭部和HTTP體兩個(gè)部分,其中請(qǐng)求頭部包含請(qǐng)求的URL及各類頭數(shù)據(jù),而響應(yīng)體部分則包含頁(yè)面的主要內(nèi)容。
分析清楚HTTP請(qǐng)求和響應(yīng)間的關(guān)系,就能夠根據(jù)需求對(duì)爬蟲(chóng)進(jìn)行實(shí)現(xiàn)了。
對(duì)爬蟲(chóng)而言,需要關(guān)注URL、UA、Cookies及內(nèi)容的幾個(gè)方面。
對(duì)協(xié)議還原而言,HTTP是最基礎(chǔ)的協(xié)議,不可避免地每個(gè)人都會(huì)接觸到,本號(hào)內(nèi)之前也介紹個(gè)HTTP協(xié)議相關(guān)的內(nèi)容及實(shí)例,可以作為了解HTTP請(qǐng)求和響應(yīng)的參考,如:
干貨!鏈家二手房數(shù)據(jù)抓取及內(nèi)容解析要點(diǎn)
Wireshark分析實(shí)戰(zhàn):某達(dá)速遞登錄帳號(hào)密碼提取
協(xié)議分析實(shí)戰(zhàn):某航某凰知音用戶名及密碼提取
使用Fiddler進(jìn)行HTTP流量分析
裸奔的支付X聊天,你還敢用嗎?
使用Fiddler抓取手機(jī)HTTP流量包
HTML
HTML即網(wǎng)頁(yè)的設(shè)計(jì)語(yǔ)言,一個(gè)網(wǎng)站是由一系列固定和臨時(shí)的HTML頁(yè)面組成的,了解了HTML之后,就能很方便地對(duì)特定內(nèi)容進(jìn)行提取了。爬蟲(chóng)中對(duì)內(nèi)容的分析和提取,主要就是對(duì)HTML頁(yè)面的提取。
對(duì)HTML的解析,在Python中可以使用BeautifulSoup庫(kù),其安裝可以參考:
Windows下Python 3.6 安裝BeautifulSoup庫(kù)
對(duì)HTML的學(xué)習(xí),可以參考w3school網(wǎng)站的相關(guān)內(nèi)容。
JavaScript
JavaScript是一種解釋型語(yǔ)言,通常在網(wǎng)站設(shè)計(jì)中使用,用來(lái)進(jìn)行交互信息的生成和獲取。爬蟲(chóng)中對(duì)內(nèi)容的分析提取的另一部分,就是對(duì)JavaScript的信息計(jì)算和構(gòu)造。
同樣的,對(duì)其學(xué)習(xí),可以參考w3school網(wǎng)站的相關(guān)內(nèi)容。
04
—
爬取難點(diǎn)
爬蟲(chóng)作為一種模仿瀏覽器交互的自動(dòng)化程序,不可避免地會(huì)遇到一些問(wèn)題,典型的問(wèn)題有:
網(wǎng)站反爬蟲(chóng)措施
網(wǎng)站會(huì)對(duì)爬蟲(chóng)進(jìn)行一定的限制,例如對(duì)包含一些特征的請(qǐng)求進(jìn)行拒絕,對(duì)一些頻繁請(qǐng)求的IP進(jìn)行限制訪問(wèn)。這需要使用一定的策略和手段來(lái)處理,后續(xù)將會(huì)在相關(guān)文章中講到。
交互的模仿
對(duì)各個(gè)不同的網(wǎng)站,需要執(zhí)行的請(qǐng)求方式各不相同,有些可能是根據(jù)一定順序執(zhí)行特定操作,有些需要根據(jù)前后操作的結(jié)果進(jìn)行不同處理,這需要在爬蟲(chóng)的設(shè)計(jì)中考慮到。這個(gè)交互,考驗(yàn)的是對(duì)網(wǎng)站的結(jié)構(gòu)的理解,對(duì)有一定協(xié)議分析能力的朋友來(lái)說(shuō),這不會(huì)太難。
動(dòng)態(tài)腳本的解析
部分網(wǎng)站,需要根據(jù)JavaScript等對(duì)內(nèi)容進(jìn)行解析,這需要對(duì)相關(guān)代碼有一定的理解能力,考驗(yàn)的是編程水平,這只能靠我們自己在實(shí)戰(zhàn)中提高了。
在后續(xù),我將通過(guò)實(shí)戰(zhàn)的方式,和大家一起深入了解爬蟲(chóng)的世界,有需求,盡管提,隨時(shí)聯(lián)系。
長(zhǎng)按進(jìn)行關(guān)注。
總結(jié)
- 上一篇: Fiddler使用技巧:强大的数据文本编
- 下一篇: 顺F速运,你被爱加M坑了