基本認證是一種用來允許Web瀏覽器后者其他客戶端程序在請求時,提供用戶名和口令形式的身份憑證的一種登錄驗證方式。把“用戶名+冒號+密碼”用算法加密后的字符串放到中的中發送給服務端。在發明之前,HTTP基本認證是處理網站登錄最常用的方法,目前一些安全性比較高網址還在使用這種方式。
示例
1、需求說明:訪問某網站(涉及內部,不對外公布)。
2、分析過程:在瀏覽器中輸入該網址,看到如下頁面。這時候需要輸入用戶名和密碼才能得到所需要的數據。否則會返回錯誤代碼401,要求用戶重新提供用戶名和密碼。此外用抓取中間數據時,中有如下信息:,很明顯這是一個HTTP基本認證。
3、解決方案:這個實際是個post請求,和普通post的請求區別是:在每次請求數據時,需要用加密用戶名和密碼,并附加到請求頭中。庫提供了一個auth模塊專門用于處理HTTP認證,這樣就不用程序自己做加密處理。下面給出具體代碼:
知識點
目前有多種http登錄驗證方法,其中最廣泛應用的是基本驗證和摘要驗證,auth模塊也提供摘要驗證處理方法,具體使用方法我也沒有研究過,請各位查詢相關資料。
五、動態頁面
前面介紹了靜態頁面和含有post表單網站的爬蟲方式,相對比較簡單。而實際在做網頁爬蟲工作時頁面情況更加多樣復雜。如:
1、網頁中包含代碼,需要經過渲染處理才能獲取原始數據;
2、網站具有一定反爬蟲能力,有些是需要客戶端腳本執行JS后才會產生,而模塊又不能執行JS代碼,如果我們按照第三部分操作來post表單,會發現部分少了部分,導致請求被拒絕。在當前知名網站反爬蟲工作做的比較好,很難找到簡單post表單就可以。
那有什么好的方式解決這種類型網站的爬蟲呢?
“+ + 第三方瀏覽器“。
示例
2、分析過程:
(1) 當我們使用 庫去獲取服務器源碼時,發現獲取的源碼和瀏覽器上渲染出的場景不一樣,拿到是JS源碼。如下圖:
有個第三方庫PyV8用python爬取網站數據,該庫可以執行JS代碼,但執行效率低,此外微軟官網還涉及JS加密的,若是采用 + Pyv8 + 三種庫組合方式處理,那代碼會顯得臃腫雜亂。
那是否有其他更為簡潔易懂的方式呢?
有, 。
(2)“+ 第三方瀏覽器”,可以讓瀏覽器自動加載頁面,由瀏覽器執行JS從而獲取到需要的數據,這樣我們的代碼就無需實現瀏覽器客戶端的功能。可以說,“ + 第三方瀏覽器”組成了一個強大的網絡爬蟲,可以處理、等頁面爬取情況。第三方瀏覽器分有界面()和無界面(),有界面瀏覽器就是可以直接看到瀏覽器被打開以及跳轉的過程。無界面瀏覽器會將網站加載到內存并執行頁面上的JS,不會有圖形界面。可以自己喜好或者需求選擇第三方瀏覽器。
3、解決方案:采用“+ ”方式完成需求。
(1)下載安裝的庫;
(2)下載到本地;
(3)利用 api完成對頁面的操作。下面給出一個示例,完成微軟官網的登錄。示例代碼在初始化時設置了網絡代理、指定了瀏覽器下載文件保存路徑、讓提示下載進度等信息。
知識點
在實例化時,可以通過參數對瀏覽器做些設置用python爬取網站數據,如設置網絡代理、瀏覽器下載文件保存路徑等。若是不傳參數,則默認繼承本地瀏覽器設置。若是對瀏覽器啟動時屬性進行設置,則就利用到了類。具體信息可參考官網。
“ + + 第三方瀏覽器”可以處理多種爬蟲場景,包括靜態頁面,post表單,以及JS等。應用場景很強大,使用操作瀏覽器進行模擬點擊的方式就可以讓我們省心很多,不需要擔心有什么“隱藏字段”、追蹤等。但對于包含驗證碼網頁的操作,這種方式也不好處理,主要困難在于圖像識別。
六、總結
本文主要針對各網站特點給出不同的爬蟲方式,可以應對大量場景的數據爬取。在實際工作中使用頻率最多還是“靜態頁面”、“動態頁面”這兩種。當然,若是頁面包含驗證碼,那就需要結合圖像識別工具做些事情了,這種情況相對也比較難處理,圖像識別準確率受到圖片內容影響。
這里是個人的一些小總結,不知道大家是否有其他更好的方法呢?
大家若是有其他比較好的爬蟲案例,歡迎在評論區留言,大家一起學習交流!