引言:
當(dāng)我們?cè)跒g覽相關(guān)網(wǎng)頁(yè)的時(shí)候會(huì)發(fā)現(xiàn),某些網(wǎng)站定時(shí)會(huì)在原有網(wǎng)頁(yè)數(shù)據(jù)的基礎(chǔ)上更新一批數(shù)據(jù),例如某電影網(wǎng)站會(huì)實(shí)時(shí)更新一批最近熱門的電影。小說網(wǎng)站會(huì)根據(jù)作者創(chuàng)作的進(jìn)度實(shí)時(shí)更新最新的章節(jié)數(shù)據(jù)等等。那么,類似的情景,當(dāng)我們?cè)?strong>爬蟲的過程中遇到時(shí),我們是不是需要定時(shí)更新程序以便能爬取到網(wǎng)站中最近更新的數(shù)據(jù)呢?
一.增量式爬蟲
概念:通過爬蟲程序監(jiān)測(cè)某網(wǎng)站數(shù)據(jù)更新的情況,以便可以爬取到該網(wǎng)站更新出的新數(shù)據(jù)。
如何進(jìn)行增量式的爬取工作:
·在發(fā)送請(qǐng)求之前判斷這個(gè)URL是不是之前爬取過
·在解析內(nèi)容后判斷這部分內(nèi)容是不是之前爬取過
·寫入存儲(chǔ)介質(zhì)時(shí)判斷內(nèi)容是不是已經(jīng)在介質(zhì)中存在
分析:
不難發(fā)現(xiàn),其實(shí)增量爬取的核心是去重,至于去重的操作在哪個(gè)步驟起作用,只能說各有利弊。在我看來,前兩種思路需要根據(jù)實(shí)際情況取一個(gè)(也可能都用)。第一種思路適合不斷有新頁(yè)面出現(xiàn)的網(wǎng)站,比如說小說的新章節(jié),每天的最新新聞等等;第二種思路則適合頁(yè)面內(nèi)容會(huì)更新的網(wǎng)站。第三個(gè)思路是相當(dāng)于是最后的一道防線。這樣做可以最大程度上達(dá)到去重的目的。
去重方法
將爬取過程中產(chǎn)生的url進(jìn)行存儲(chǔ),存儲(chǔ)在redis的set中。當(dāng)下次進(jìn)行數(shù)據(jù)爬取時(shí),首先對(duì)即將要發(fā)起的請(qǐng)求對(duì)應(yīng)的url在存儲(chǔ)的url的set中做判斷,如果存在則不進(jìn)行請(qǐng)求,否則才進(jìn)行請(qǐng)求。
對(duì)爬取到的網(wǎng)頁(yè)內(nèi)容進(jìn)行唯一標(biāo)識(shí)的制定,然后將該唯一表示存儲(chǔ)至redis的set中。當(dāng)下次爬取到網(wǎng)頁(yè)數(shù)據(jù)的時(shí)候,在進(jìn)行持久化存儲(chǔ)之前,首先可以先判斷該數(shù)據(jù)的唯一標(biāo)識(shí)在redis的set中是否存在,在決定是否進(jìn)行持久化存儲(chǔ)。
以上內(nèi)容為大家介紹了python之增量式爬蟲是什么?希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.em-kal.com/