學(xué)爬蟲(chóng),需要掌握哪些Python基礎(chǔ)?

入手爬蟲(chóng)確實(shí)不要求你精通Python編程,但基礎(chǔ)知識(shí)還是不能忽視的,那么我們需要哪些Python基礎(chǔ)呢?

首先我們先來(lái)看看一個(gè)最簡(jiǎn)單的爬蟲(chóng)流程:


第一步要確定爬取頁(yè)面的鏈接,由于我們通常爬取的內(nèi)容不止一頁(yè),所以要注意看看翻頁(yè)、關(guān)鍵字變化時(shí)鏈接的變化,有時(shí)候甚至要考慮到日期;另外還需要主要網(wǎng)頁(yè)是靜態(tài)、動(dòng)態(tài)加載的。

第二步請(qǐng)求資源,這個(gè)難度不大,主要是Urllib,Request兩個(gè)庫(kù)的使用,必要時(shí)候翻翻官方文檔即可

第三步是解析網(wǎng)頁(yè)。請(qǐng)求資源成功后,返回的整個(gè)網(wǎng)頁(yè)的源代碼,這時(shí)候我們就需要定位,清洗數(shù)據(jù)了

談到數(shù)據(jù),第一個(gè)要注意的點(diǎn)就是數(shù)據(jù)的類(lèi)型,是不是該掌握!

其次,網(wǎng)頁(yè)上的數(shù)據(jù)往往排列十分整齊,這多虧了列表,使用大部分網(wǎng)頁(yè)數(shù)據(jù)整潔而有規(guī)律,所以列表、循環(huán)語(yǔ)句是不是也要掌握!

但值得注意得是網(wǎng)頁(yè)數(shù)據(jù)不一定都是整齊而有規(guī)律的,比如最常見(jiàn)的個(gè)人信息,除了必填選項(xiàng),其他部分我就不愛(ài)填,這時(shí)候部分信息缺失了,你是不是得先判斷一下是否有數(shù)據(jù),再進(jìn)行抓取,所以判斷語(yǔ)句是不是也不能少!

掌握以上內(nèi)容,我們的爬蟲(chóng)基本上能跑起來(lái)了,但為了提高代碼效率,我們可以借助函數(shù)將一個(gè)程序分割成多個(gè)小部分,每部分負(fù)責(zé)一部分內(nèi)容,這樣就能根據(jù)需要多次調(diào)動(dòng)一個(gè)函數(shù)了,如果你再厲害點(diǎn),以后開(kāi)發(fā)個(gè)爬蟲(chóng)軟件,是不是還要再掌握個(gè)類(lèi)

第四步是保存數(shù)據(jù),是不是得先打開(kāi)文件,寫(xiě)數(shù)據(jù),最后關(guān)閉啊,所以是不是還得掌握文件的讀寫(xiě)啊!

所以,你需要的掌握的最最最基本的Python知識(shí)點(diǎn)有

我剛整理了一套2018最新的0基礎(chǔ)入門(mén)和進(jìn)階教程,無(wú)私分享,加Python學(xué)習(xí)q u n?:227-435-450即可獲取,內(nèi)附:開(kāi)發(fā)工具和安裝包,以及系統(tǒng)學(xué)習(xí)路線圖

線程與進(jìn)程

當(dāng)然只掌握這些是遠(yuǎn)遠(yuǎn)不夠的,因?yàn)槲覀冞€有分布式爬蟲(chóng),爬蟲(chóng)框架等,這要求我們掌握線程與進(jìn)程;這兩個(gè)可能會(huì)比較陌生,我還沒(méi)接觸爬蟲(chóng)時(shí)候也不懂這些,所以先來(lái)看看他們的概念

進(jìn)程: 資源分配的最小單位

線程: 程序執(zhí)行的最小單位

看起來(lái)太抽象了,我們打個(gè)比方吧:

進(jìn)程就相當(dāng)于你打開(kāi)的一個(gè)個(gè)程序,如QQ,微信,微博等,而進(jìn)程就相當(dāng)于程序里的每一個(gè)命令,如收發(fā)消息等


1.多線程與多進(jìn)程

多線程、多進(jìn)程顧名思義就是多個(gè)線程、進(jìn)程并行,是實(shí)現(xiàn)多任務(wù)的好幫手,所以在效率上有

單進(jìn)程+單線程 < 單進(jìn)程+多線程 < 多進(jìn)程+多線程

再來(lái)打個(gè)比方,假如我要給整個(gè)班級(jí)的同學(xué)發(fā)份資料,我可以通過(guò)微信一個(gè)一個(gè)地發(fā)給他們——單進(jìn)程+單線程,但這效率實(shí)在太低了,特別費(fèi)時(shí);于是我可以選擇用微信群發(fā)啊——單進(jìn)程+多線程,這樣效率一下子提高了很多,但問(wèn)題又來(lái)了,微信群發(fā)上限是200人,假如我要給400人發(fā)文件,是不是就得分兩次群發(fā)呢?為了節(jié)省時(shí)間,我還可以一部分用qq群發(fā),一部分用微信群發(fā),這就是多進(jìn)程+多線程


比較

可靠性 進(jìn)程間不會(huì)相互影響 一個(gè)線程掛掉將導(dǎo)致整個(gè)進(jìn)程掛掉

分布性 多核、多機(jī) 多核

2.協(xié)程

協(xié)程不是進(jìn)程或線程,其執(zhí)行過(guò)程更類(lèi)似于子例程,或者說(shuō)不帶返回值的函數(shù)調(diào)用。

在剛剛的例子中,協(xié)程又是一個(gè)怎么樣的存在呢?

群發(fā)消息和調(diào)用多個(gè)程序時(shí),都會(huì)受流量(相當(dāng)于CPU)的影響而無(wú)法將資料發(fā)送出去,而假如我讓同學(xué)B幫忙發(fā)資料,他發(fā)資料時(shí)候并不占用我的流量,因此效率更高,此時(shí),同學(xué)B就相當(dāng)于我的一個(gè)協(xié)程,所以協(xié)程在一定程度上又好于多線程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容