如何登錄一個網站

登錄一個沒有驗證碼的網站是很簡單的,只需要找到登錄的地址,再post它所需要的包即可。

首先就要抓取發送的包。我這裏用的是firefox的httpfox插件。



如圖就是我在研究刷評論的時候的截圖,post方法後面的就是登錄網址,而下面窗口的post data就是我們要發送的包。

首先我們需要找到一個正確的登錄網址。彈出的窗口是js做的,不好抓取,要是那種用html語言生成的頁面,通常都是login結尾的。比如豆瓣就是:

https://www.douban.com/accounts/login

然後查看抓取的包如下:(會有很多包,主要查看的是post以及post前的get)



post包的內容就如上所示了。source爲None,redir是登錄後去往的地址,form_email就是登錄地址了,下面還有密碼,以及login字段等等。這裏需要注意的是,postdata是個字典,不僅僅要保持value一樣,還要保持key一致。每個網站的登錄名和密碼的key並不都是一致的,login字段如果是亂碼,就是中文的‘登錄’。

只要把上述字段弄成一個字典,post到登錄網址上,就完成了登錄過程。因爲目前不想用cookies,因此最好redir的value是你想登錄的網址,這樣一登錄就抓下來了目標地址。

比如我登錄豆瓣的地址就是:

 self.pwd = {
            'form_email':self.login,
            'form_password':self.password,
            'source':None,
            'redir':self.group_url,
            'remember':'on',
            'login':'登錄',
        }
用戶名密碼地址自己填上就可以了。打開網頁最常用的就是urllib2中的open方法,最近偷懶,用requests,很方便,很好用。

首先模擬登錄網站,先get一下,表示自己點擊了網站。(如果post中有可變內容,通常也是在這一步得到,我會在下一篇文章中詳細說明)。

self.jar = cookielib.CookieJar()
self.request = requests.get(self.url, cookies=self.jar)
這裏生成了一個空的cookie。豆瓣沒有動態驗證(偶爾會有驗證碼),然後我們就可以登錄了。

self.request = requests.post(self.url, headers=self.header, cookies=self.request.cookies, data=self.pwd)
這裏我簡單的僞裝了一個header,具體說明看前面的文章。這裏的self.request就是redir網址的那個對象,就可以繼續分析了。分析方法我前一篇文章也說過了。

有時候會遇到動態驗證的網站,其實原理也很簡單,我會在下一篇文章中說明。

源代碼:https://github.com/gt11799/login_website

——————————————————————

github主頁:https://github.com/gt11799 

E-mail:[email protected]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章