【圖解】Python模擬登錄新浪微博

上一篇文章《Scrapy用Cookie實現(xiàn)模擬登錄》完成了用Cookie實現(xiàn)模擬登錄,繞開了用戶名、密碼和驗證碼登錄的步驟。今天來比較一下以常規(guī)驗證(用戶名密碼+驗證碼)的方式實現(xiàn)新浪微博的模擬登錄,看看實現(xiàn)的過程中有哪些要注意的點。

一、分析登錄URL和表單字段

為了更好分析登錄驗證過程,找到登錄提交的URL和表單字段,選取了新浪微博手機(jī)版的頁面進(jìn)行追蹤分析,采用的工具是chrome開發(fā)者工具Network功能。

手機(jī)版登錄頁面

1、查看源代碼,了解基本表單字段
通過查看登錄頁源代碼,了解登錄的url,用戶名字段mobile, 密碼字段password_9771(是password加上一個隨機(jī)數(shù)),還有一些隱藏字段vk, capId,以及驗證碼。

2、Network追蹤登錄過程
1)登錄的完整表單字段:


Form Data記錄
  • 這些字段名和值需要先從登錄頁面抓取:
    • 密碼字段名不是一個固定的值,password+隨機(jī)數(shù)
    • vk, capId是隱藏字段,登錄時必須
    • code 是驗證碼

2)登錄的全過程:
新浪微博的登錄過程,第一步是提交用戶名密碼及其他參數(shù),POST方法,后面經(jīng)過4次重定向,完成登錄。


查看新浪微博登錄重定向過程

重定向都是通過location發(fā)送,get方法。理論上登錄流程,重定向的過程不需要我們關(guān)心,但是Scrapy在發(fā)送登錄請求時,會遇到種種問題,需要調(diào)試時,了解整個過程就很關(guān)鍵。

二、抓取登錄表單及參數(shù)

1、先發(fā)送一個登錄url請求:start_requests()方法

def start_requests(self):

        return [Request("http://login.weibo.cn/login/", meta={'cookiejar': 1}, callback=self.pre_login)]

2、抓取登錄的表單字段:pre_login()方法

   def pre_login(self,response):


        selector = Selector(response)
        pwdname =selector.xpath('//input[@type="password"]/@name').extract()[0]
        vk = selector.xpath('//input[@name="vk"]/@value').extract()[0]
        imgsrc = selector.xpath('/html/body/div[2]/form/div/img[1]/@src').extract()[0]
        index = imgsrc.find('cpt=')
        capId = imgsrc[index+4:]

        action = selector.xpath('/html/body/div[2]/form/@action').extract()[0]
        action = 'http://login.weibo.cn/login/'+action

        # ... ... next, 完成驗證碼驗證,構(gòu)造表單參數(shù)...

三、完成驗證碼的驗證

在這里,我沒有采用復(fù)雜的圖片驗證算法庫,而是直接在控制臺上把驗證碼的URL輸出來,訪問一下,手工填入的方式,codeimg = raw_input('please input image:'), 簡單粗暴、快速準(zhǔn)確。

查看驗證碼

四、構(gòu)造表單參數(shù),提交登錄請求

         data = {'mobile':'name@126.com',    #你的微博帳號
                pwdname: '123456789',     #你的密碼
                'code': codeimg,    #獲取的驗證碼
                'remember':'',
                'backURL':'http://weibo.cn/u/2508944032',   #登錄后要訪問url
                'backTitle':u'手機(jī)新浪網(wǎng)',
                'tryCount':'',
                'vk':vk,            #隱藏字段
                'capId':capId,  #隱藏字段
                'submit':u'登錄'}
yield FormRequest(url=action,meta={'cookiejar': response.meta['cookiejar']},headers=self.headers,formdata=data,callback=self.parse_item)

注意這里使用了FormRequest直接提交登錄url和表單參數(shù),而不是用FormRequest.from_response(),因為請求的登錄url不一樣。Scrapy官網(wǎng)FormRequest.from_response()方法模擬用戶登錄》

OK,使用Scrapy完成新浪微博驗證登錄。在實現(xiàn)的過程也遇到不少問題,查看錯誤提示,不斷調(diào)試。
可能是因為新浪微博登錄參數(shù)和流程的更改,大家可以對比一下網(wǎng)絡(luò)上的代碼以及Scrapy官網(wǎng)上的說明。

下一步就是數(shù)據(jù)提取、保存。之前文章都有講過。

控制臺信息

Github地址 https://github.com/ppy2790/weibo.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • HTML表單 在HTML中,表單是 ... 之間元素的集合,它們允許訪問者輸入文本、選擇選項、操作對象等等,然后將...
    蘭山小亭閱讀 3,515評論 2 14
  • 4 創(chuàng)建一個社交網(wǎng)站 在上一章中,你學(xué)習(xí)了如何創(chuàng)建站點地圖和訂閱,并且為博客應(yīng)用構(gòu)建了一個搜索引擎。在這一章中,你...
    lakerszhy閱讀 2,267評論 0 7
  • 第二部分 Blog例子 第八章 用戶驗證 大部分程序需要追蹤用戶身份。當(dāng)用戶連接到程序,通過一系列步驟使自己的身份...
    易木成華閱讀 1,419評論 0 4
  • 喧鬧的街頭充斥著雜亂無章的聲音,像是指尖從耳膜劃過。刺耳。尖利。我佇立在站牌前,靜候車來。 公交車淌過昨夜未干的洼...
    安詳?shù)您?/span>閱讀 443評論 0 0

友情鏈接更多精彩內(nèi)容