① Python網路爬蟲5 - 爬取QQ空間相冊
自畢業後,就再也沒有使用過QQ,QQ空間里記錄的是一段段不那麼精彩的青春時光,但它們卻是不可多得的回憶。近日,我決定學以致用,利用Python將QQ空間相冊的所有照片爬取下來,以作備份。
分析QQ空間時,首先需要了解登錄QQ空間的步驟。最初的設想是通過requests庫配置登錄請求,模擬登錄過程,但很快便放棄了這一思路。通過觀察登錄按鈕綁定的監聽事件,我們可以追蹤到按鈕的點擊事件。賬號加密是必然的,對於這一堆復雜的代碼,耐心的勇士可以嘗試解析,但顯然這不是最高效的方法。
因此,選擇使用selenium模擬用戶登錄成為了一種更為省時省力的選擇。我們僅需要通過selenium完成登錄過程,獲取到Cookies和g_tk參數後即可停止使用,效率並不低。
登錄後,頁面會跳轉至 user.qzone.qq.com/{QQ_NUMBER}。這時,滑鼠移到導航欄,會發現所有的導航欄鏈接都是javascript:;。這正是暗箱操作的陷阱。不過,這並不難處理,通過調試工具捕獲點擊後產生的請求,然後過濾出正確的請求包即可。網路包數量眾多,那麼如何過濾呢?可以猜想相冊數據的API必然返回一個列表list,嘗試過濾list並逐一排除,最後定位到請求包。通過fcg_list過濾後的數據包,列表信息以jsonp格式返回,稍作處理即可作為json格式讀取。
從Headers和Response中可以分別獲取到兩組重要信息。先看請求包,其中hostUin、uin都是QQ號,g_tk是每次重新登錄都會更新的參數,其它有些參數不是必須的,通過嘗試整理出如下請求參數。
接下來看jsonp格式的跨域響應包,shine0_Callback是請求包的callbackFun參數決定的,如果沒這個參數,響應包會以_Callback作為默認名。所有相冊信息以json格式存入albumListModeSort中,上面只截取了一個相冊的信息。相冊信息中,name代表相冊名稱,id作為唯一標識可用於請求該相冊內的照片信息,而pre僅僅是一個預覽縮略圖的鏈接,無關緊要。
分析單個相冊時,與獲取相冊信息類似,進入某一相冊,使用cgi_list過濾數據包,找到該相冊的照片信息。同樣的道理,根據數據包可以獲取照片列表信息的請求包和響應信息。先看請求,其中有幾個關鍵參數。為了獲取所有照片,可以將pageStart設為0,pageNum設為所有相冊所含照片的最大值。同樣可以簡化參數,在相冊列表請求參數的基礎上添加topicId、pageStart和pageNum三個參數即可。下面來看返回的照片列表信息,返回的照片信息都存於photoList,上面只截取了一張照片的信息,後面一部分返回的是當前相冊的一些基本信息。totalInAlbum、totalInPage存儲了當前相冊總共包含的照片數及本次返回的照片數,而我們需要下載的圖片鏈接則是url。
至此,所有請求和響應數據都已分析清楚,接下來便是Coding的階段。確定爬取方案時,創建qqzone類以模擬登錄過程。獲取Cookies時,使用selenium獲取非常方便。獲取g_tk則需要解決本爬蟲的最大難點,因為從網頁中無法找到直接寫明的數值,只有各種函數調用。通過全局搜索,發現有多種獲取方式,最終選擇了其中一處,通過selenium執行腳本的功能成功獲取到了g_tk!至此,selenium的使命就完成了,剩下的將通過requests來完成。
接下來需要逐步生成請求並獲取數據,為了方便起見,使用會話的方式請求數據,配置好cookie和headers,避免每次請求都設置一遍。獲取相冊信息時,需要封裝好請求參數,然後通過session.get爬取數據,再通過正則匹配以json格式讀取jsonp數據,最後解析所需的信息。獲取相冊列表後,逐個請求照片列表信息,進而逐一下載。下載圖片也是通過request,記得設置超時時間。
爬取測試階段,確保一切順利進行。至此,利用Python爬取QQ空間相冊的過程已經完成。
② 如何通過網路爬蟲爬取appannie的排行榜數據
爬取網路數據時,面臨需要登錄的網站有兩個主要策略:模擬登錄和使用登錄後的Cookie。首先,讓我們探討模擬登錄的方法。通過Firefox或Chrome等瀏覽器,可輕松發現登錄過程往往涉及向特定網址POST提交參數,例如 /www.appannie.com/account/login/> 。需要的參數包括用戶名、密碼以及CSRF令牌。CSRF令牌通常隱藏在網頁源碼中的一個input標簽中,可以通過正則匹配或使用庫如BeautifulSoup解析HTML獲取。Python中的requests庫提供了一個方便的解決方案,用於保持登錄狀態並管理Cookie。
另一種方法是直接使用登錄後的Cookie。通過在網頁上使用你的賬號密碼登錄,然後查看瀏覽器開發者工具中獲取到的Cookie。接下來,將這些Cookie整合到你的代碼中即可。觀察網頁,Cookie有效期約為兩周,這意味著與手動更新Cookie相比,此方法在長期使用時更具優勢,避免了頻繁更新Cookie的繁瑣操作。
總結以上策略,根據需求和使用場景選擇合適的登錄方法。模擬登錄適用於需要頻繁操作的場合,而使用登錄後的Cookie則適合長期穩定使用的情況。通過合理運用這兩種方法,你可以有效地獲取App Annie排行榜數據或其他需要登錄訪問的網站信息。
③ 如何爬蟲網頁數據
爬取網頁數據原理如下:
如果把互聯網比作蜘蛛網,爬蟲就是蜘蛛網上爬行的蜘蛛,網路節點則代表網頁。當通過客戶端發出任務需求命令時,ip將通過互聯網到達終端伺服器,找到客戶端交代的任務。一個節點是一個網頁。蜘蛛通過一個節點後,可以沿著幾點連線繼續爬行到達下一個節點。
簡而言之,爬蟲首先需要獲得終端伺服器的網頁,從那裡獲得網頁的源代碼,若是源代碼中有有用的信息,就在源代碼中提取任務所需的信息。然後ip就會將獲得的有用信息送回客戶端存儲,然後再返回,反復頻繁訪問網頁獲取信息,直到任務完成。