Python如何實現模擬登陸爬取Python實現模擬登陸的方式簡單來說有三種:一、采用post請求提交表單的方式實現。二、利用瀏覽器登陸網站記錄登陸成功后的cookies,采用get的請求方式,傳入cookies值來實現登陸。三、采用模擬瀏覽器的方式登陸。三種方式各有利弊,采用第一種方式每次運行程序都是重新登陸,容易造成封賬號的情況出現,同時不能用在驗證碼是JS加載生成的和查看不到提交表單格式這兩種情況。我認為第二種方式優於第一種和第三種,大多數情況下推薦使用第二種。對於較大規模的采集,一般的做法是利用大量小號采用第一或第三種方式定期生成大量的cookies,保存起來形成一個自己的cookie池,並維護其有效性,在采集時調用cookie池中的cookies完成爬取。
第一種提交post請求的方式首先講解第一種方式,其重點有兩個:一是找到網站的登陸網址;二是找到post請求提交的表單格式。以豆瓣為例豆瓣的登陸網址為:https://accounts.douban.com/login 這里要注意通訊協議是https而不是http 。接下來解決如何查看網站登陸提交的表單格式。這里使用的是chrome瀏覽器。
在瀏覽器中打開網址:https://www.douban.com/,出現如下圖所示頁面
點擊快捷鍵F12打開開發者工具,選中Network,並勾選Preserve log,輸入假的賬號或密碼,不輸入驗證,如下圖所示。
點擊登陸豆瓣按鈕,選中login頁面,點擊headers,翻到最后面,可以看到formdata,如下圖所示:
如圖所示豆瓣登陸需要提交的以下關鍵字:
- source:index_nav
- form_email:你的賬號
- form_password:密碼
- captcha-solution:驗證碼
- captcha-id:HzglLIfrAxX6maSpZSJPsDAW:en(驗證碼所對應的id)
知道表單格式后下面開始編寫爬蟲代碼。
模擬登陸使用requests庫和re庫,豆瓣前幾次登陸是不需要輸入驗證碼的,只輸入賬號密碼就可以,但登陸幾次后由於其反爬蟲機制的作用,就需要輸入驗證碼了,所以程序中需要判斷本次登陸是否需要輸入驗證碼,本程序處理驗證碼的方式比較簡單粗暴,就是自己看驗證然后手動輸入,完成登陸。
部分代碼如圖所示:
想要查看完整代碼請關注公眾號並回復:db
第二種利用登陸cookies的方式第二種方式操作起來相對比較簡單,首先打開瀏覽器,打開豆瓣首頁,完成登陸。在登陸完成的頁面點擊快捷鍵F12打開開發者工具,選中Network,並勾選Preserve log,更新當前頁面。選中www.douban.com頁面,點擊headers,在Request Headers中,可以看到Cookie,把它復制粘貼下來。
完成以上操作后,可以完成利用cookie傳入的方式實現模擬登陸了。在完成登陸后在程序中嘗試了獲取標題、摘要、和圖片鏈接如下圖所示,獲取到數據后存儲到MongoDB數據庫中。
部分代碼如下圖所示: