學爬蟲,我需要掌握哪些Python基礎?

小小蒲公英發表於2018-08-21

更多爬蟲例項請見 https://blog.csdn.net/weixin_39777626/article/details/81564819

接觸爬蟲已經有一段時間了,常常有人問我:我會點Python,想自學爬蟲,你看用什麼方法好呢?
我:我喜歡邊做專案邊學習,爬取過程中遇到問題再百度,擴充套件
xx:我看了網上教材,過程很簡略,最後給了一個編碼,有的我例項一下好像還不成功
我:程式碼也會“過期”,尤其是爬蟲,需要自己修改
xx:怎麼修改?
我:Python學到哪了?
xx:集合
我:。。。

入手爬蟲確實不要求你精通Python程式設計,但基礎知識還是不能忽視的,那麼我們需要哪些Python基礎呢?
首先我們先來看看一個最簡單的爬蟲流程:
這裡寫圖片描述

  1. 第一步要確定爬取頁面的連結,由於我們通常爬取的內容不止一頁,所以要注意看看翻頁、關鍵字變化時連結的變化,有時候甚至要考慮到日期;另外還需要主要網頁是靜態、動態載入的。
  2. 第二步請求資源,這個難度不大,主要是Urllib,Request兩個庫的使用,必要時候翻翻官方文件即可
  3. 第三步是解析網頁。請求資源成功後,返回的整個網頁的原始碼,這時候我們就需要定位,清洗資料了
    談到資料,第一個要注意的點就是資料的型別,是不是該掌握!
    其次,網頁上的資料往往排列十分整齊,這多虧了列表,使用大部分網頁資料整潔而有規律,所以列表、迴圈語句是不是也要掌握!
    但值得注意得是網頁資料不一定都是整齊而有規律的,比如最常見的個人資訊,除了必填選項,其他部分我就不愛填,這時候部分資訊缺失了,你是不是得先判斷一下是否有資料,再進行抓取,所以判斷語句是不是也不能少!
    掌握以上內容,我們的爬蟲基本上能跑起來了,但為了提高程式碼效率,我們可以藉助函式將一個程式分割成多個小部分,每部分負責一部分內容,這樣就能根據需要多次調動一個函式了,如果你再厲害點,以後開發個爬蟲軟體,是不是還要再掌握個類
  4. 第四步是儲存資料,是不是得先開啟檔案,寫資料,最後關閉啊,所以是不是還得掌握檔案的讀寫啊!

所以,你需要的掌握的最最最基本的Python知識點有
這裡寫圖片描述

執行緒與程式

當然只掌握這些是遠遠不夠的,因為我們還有分散式爬蟲,爬蟲框架等,這要求我們掌握執行緒與程式;這兩個可能會比較陌生,我還沒接觸爬蟲時候也不懂這些,所以先來看看他們的概念

  • 程式: 資源分配的最小單位
  • 執行緒: 程式執行的最小單位

看起來太抽象了,我們打個比方吧:
程式就相當於你開啟的一個個程式,如QQ,微信,微博等,而程式就相當於程式裡的每一個命令,如收發訊息等
這裡寫圖片描述

1.多執行緒與多程式

多執行緒、多程式顧名思義就是多個執行緒、程式並行,是實現多工的好幫手,所以在效率上有
單程式+單執行緒 < 單程式+多執行緒 < 多程式+多執行緒
再來打個比方,假如我要給整個班級的同學發份資料,我可以通過微信一個一個地發給他們——單程式+單執行緒,但這效率實在太低了,特別費時;於是我可以選擇用微信群發啊——單程式+多執行緒,這樣效率一下子提高了很多,但問題又來了,微信群發上限是200人,假如我要給400人發檔案,是不是就得分兩次群發呢?為了節省時間,我還可以一部分用qq群發,一部分用微信群發,這就是多程式+多執行緒
這裡寫圖片描述

比較

多程式 多執行緒
資料共享
同步
複雜
簡單
簡單
複雜
記憶體
CPU
佔用記憶體多,切換複雜
利用效率低
佔用記憶體少,切換簡單
利用效率高
建立銷燬
切換

複雜,速度慢

簡單,速度快
程式設計
除錯
簡單
簡單
複雜
複雜
可靠性 程式間不會相互影響 一個執行緒掛掉將導致整個程式掛掉
分佈性 多核、多機 多核
## 2.協程 協程不是程式或執行緒,其執行過程更類似於子例程,或者說不帶返回值的函式呼叫。 在剛剛的例子中,協程又是一個怎麼樣的存在呢? 群發訊息和呼叫多個程式時,都會受流量(相當於CPU)的影響而無法將資料傳送出去,而假如我讓同學B幫忙發資料,他發資料時候並不佔用我的流量,因此效率更高,此時,同學B就相當於我的一個協程,所以協程在一定程度上又好於多執行緒

這裡寫圖片描述

更多爬蟲例項請見 https://blog.csdn.net/weixin_39777626/article/details/81564819

相關文章