一般來說,獲取數據使用 urllib庫獲取頁面。
獲取頁面數據的幾個知識點:
對每一個頁面,調用 askURL函數獲取頁面內容;
定義一個獲取頁面的函數askURL,傳入一個url函數,表示網址。
urllib.Request生成請求:rullib.urlopen發送請求獲取響應,read獲取頁面內容。
在訪問頁面時經常會出現錯誤,為了程序正常運行,要加入異常獲取try...excepy...語句
也就是說,想要快樂玩耍,必須要明白 urllib庫 如何使用。
get請求
新建個 py 文件,敲幾行代碼瞭解下urllib庫。
這個的意思就是,通過 urlopen 方法打開相應網頁,並把網頁返回給定義變量。
讀取結果就是網頁的源代碼。
這裡切記要對獲取的網頁源碼進行 utf-8 解析。
話說,感覺這個跟之前學到的 requests 的作用差不多啊。
這種獲取網頁的方式叫做獲取 get 請求。
這個課程有個小缺點,就是因為是面向大學生的,所以之前他應該是有跟這幫孩子講過網頁的一些相關知識的,所以有時候涉及到網頁的一些內容,他會直接拿來就用。
有時候會讓我們這種小白一臉懵逼。
但是問題不大,畢竟作為大學老師,都知道大部分學生是啥水平,所以以前講過的內容再用的時候,也不敢用的太多,淺嘗輒止而已,最多就是用幾個概念罷了。
對我們來說,偶爾碰到幾個不懂或者沒聽過的詞,也不怕。
畢竟,每個宅男碰到問題,都有一個最忠誠的女朋友幫我們解決問題--度娘。
post請求
另一個獲取網頁的方式叫做 post 請求, post方式就是訪問網址的時候可以給服務器發送一個表單,在裡面把用戶名、密碼加密。
即模擬用戶真實登錄時使用。
這裡為了方便,使用專門測試用的網址:httpbin.org
這裡需要使用 urllib 的 parse 方法,將下面的 bytes 中的鍵值對進行解析。
使用 bytes 將數據變為字節文件進行封裝。
鍵值對中一般放入用戶名、密碼以及cookie信息。
這裡有意思的是圖中的最後一行:"User-Agent": "Python-urllib/3.8"
也就是說,直接赤果果的告訴服務器:喂,老兄,哥是用Python訪問的,不是用瀏覽器訪問的,換句話說,我跟你一樣,都不是個人!
所以以前總聽人家說,爬蟲必須要偽裝巴拉巴拉什麼的,我估計應該主要原因就是在這裡。
你得讓服務器從你的訪問信息裡面讀出了,哦,這是通過瀏覽器訪問的,也就是說,是個活生生的人,所以,讓他進來吧。
超時處理
有時候網速可能不好,也有的時候對方發現我方是爬蟲,不想讓我方訪問。
這兩種情況都叫做超時。
網站或程序此時會卡死。
這裡使用 timeout 可以進行設定時間。
更重要的是,使用 try...excepy...語句 進行異常監測。
也就是說,對於超時,要有一個計劃性的準備。
如果在一個指定的時間內(如3秒、5秒等),服務器還沒有反應,那就應該進行結束這次循環,或者不要爬取這個網頁的操作。