学爬虫,需要掌握哪些Python基础?
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
入手爬蟲確實(shí)不要求你精通Python編程,但基礎(chǔ)知識(shí)還是不能忽視的,那么我們需要哪些Python基礎(chǔ)呢?
首先我們先來(lái)看看一個(gè)最簡(jiǎn)單的爬蟲流程:
?
第一步要確定爬取頁(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ù)的類型,是不是該掌握!
其次,網(wǎng)頁(yè)上的數(shù)據(jù)往往排列十分整齊,這多虧了列表,使用大部分網(wǎng)頁(yè)數(shù)據(jù)整潔而有規(guī)律,所以列表、循環(huán)語(yǔ)句是不是也要掌握!
但值得注意得是網(wǎng)頁(yè)數(shù)據(jù)不一定都是整齊而有規(guī)律的,比如最常見的個(gè)人信息,除了必填選項(xiàng),其他部分我就不愛填,這時(shí)候部分信息缺失了,你是不是得先判斷一下是否有數(shù)據(jù),再進(jìn)行抓取,所以判斷語(yǔ)句是不是也不能少!
掌握以上內(nèi)容,我們的爬蟲基本上能跑起來(lái)了,但為了提高代碼效率,我們可以借助函數(shù)將一個(gè)程序分割成多個(gè)小部分,每部分負(fù)責(zé)一部分內(nèi)容,這樣就能根據(jù)需要多次調(diào)動(dòng)一個(gè)函數(shù)了,如果你再厲害點(diǎn),以后開發(fā)個(gè)爬蟲軟件,是不是還要再掌握個(gè)類
第四步是保存數(shù)據(jù),是不是得先打開文件,寫數(shù)據(jù),最后關(guān)閉啊,所以是不是還得掌握文件的讀寫啊!
所以,你需要的掌握的最最最基本的Python知識(shí)點(diǎn)有
我剛整理了一套2018最新的0基礎(chǔ)入門和進(jìn)階教程,無(wú)私分享,加Python學(xué)習(xí)q u n?:227-435-450即可獲取,內(nèi)附:開發(fā)工具和安裝包,以及系統(tǒng)學(xué)習(xí)路線圖
線程與進(jìn)程
當(dāng)然只掌握這些是遠(yuǎn)遠(yuǎn)不夠的,因?yàn)槲覀冞€有分布式爬蟲,爬蟲框架等,這要求我們掌握線程與進(jìn)程;這兩個(gè)可能會(huì)比較陌生,我還沒接觸爬蟲時(shí)候也不懂這些,所以先來(lái)看看他們的概念
進(jìn)程: 資源分配的最小單位
線程: 程序執(zhí)行的最小單位
看起來(lái)太抽象了,我們打個(gè)比方吧:
進(jìn)程就相當(dāng)于你打開的一個(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ā)份資料,我可以通過微信一個(gè)一個(gè)地發(fā)給他們——單進(jìn)程+單線程,但這效率實(shí)在太低了,特別費(fèi)時(shí);于是我可以選擇用微信群發(fā)啊——單進(jì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í)行過程更類似于子例程,或者說(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é)程在一定程度上又好于多線程
轉(zhuǎn)載于:https://my.oschina.net/u/3849396/blog/2906909
總結(jié)
以上是生活随笔為你收集整理的学爬虫,需要掌握哪些Python基础?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一年期存款基准利率2022,各类存款利率
- 下一篇: 【转】Python-面向对象进阶