国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python爬蟲實戰之爬取鏈家廣州房價_04鏈家的模擬登錄(記錄)

2019-11-06 08:01:17
字體:
來源:轉載
供稿:網友

問題引入

開始鏈家爬蟲的時候,了解到需要實現模擬登錄,不登錄不能爬取三個月之內的數據,目前暫未驗證這個說法是否正確,這一小節記錄一下利用瀏覽器(IE11)的開發者工具去分析模擬登錄網站(鏈家)的內部邏輯過程,花了一個周末的時間,部分問題暫未解決。

思路介紹

利用瀏覽器(IE11)的開發者工具,啟用網絡流量捕獲,在調試之前,先做一些配置上的準備工作:清除舊的cookie和緩存,禁用跳轉后清除日志(Firefox在開發工具的Settings設置中勾上啟用持續日志)。

鏈家的模擬登錄_01清除瀏覽器緩存和Cookie

鏈家的模擬登錄_02禁用跳轉后清除日志

首先簡要介紹一下模擬登錄網站的基本邏輯,模擬網站登錄需要知道,要向什么url地址,發送什么樣的數據,GET請求還是POST請求。GET請求從服務器請求數據,不需要post data,但是經常需要在url后面加上對應的query parameter,類似?para1=value1&para2=value2之類的形式,本質上有點類似于post data。POST請求需要提供對應的post data,對應工具中的Request Body。而剩下的,是設置發送請求時的相關參數,包括user-agent等,對應工具中的Request Headers。提交請求后,網站服務器返回Response Headers和Response Body。其中,還經常涉及到cookie信息,在發送前,準備好,發送給服務器,服務器返回的信息中,往往也包含更新后的cookie值。

總結一下,主要關注點:Request HeadersRequest BodyResponse Headers、Response Body、Cookie

打開IE11后,調出工具,切換到網絡界面,打開鏈家,過濾HTML請求,可以看到,頁面跳轉到http://gz.lianjia.com/,服務器返回的Response Headers里面設置了一些cookie,如lianjia_ssidlianjia_uuid。

鏈家的模擬登錄_03打開www.lianjia.com

鏈家的模擬登錄_04打開gz.lianjia.com

點擊登錄,然后輸入用戶名和密碼,正常登錄。

找到登錄網站所涉及的最核心的地址,對于此,我們可以通過搜索在哪里發送了我們的密碼。可以看到,和我們密碼相關的url地址為https://passport.lianjia.com/cas/login。即以后如果寫代碼,所要訪問的url地址,就是這個地址了。

鏈家的模擬登錄_05登錄postdata

分析所提交的數據(post data)中的參數和值,這就是模擬網站登錄的核心數據了,是在寫代碼時,對于url=https://passport.lianjia.com/cas/login提交POST請求時,要發送的一些參數和值。

username=XXXXXXXXXXXpassWord=XXXXXXXXXXverifycode=service=http%3A%2F%2Fgz.lianjia.com%2FisAjax=truecode=lt=LT-99999-9HQFRxGdmePMdsCSnTeH9h2ne26uQbnWqN2

接下來,分析這些值是如何來的。例如lt值,搜索LT-99999,發現來自https://passport.lianjia.com/cas/PRelogin/loginTicket?

鏈家的模擬登錄_06lt值

分析Cookie,在最核心的地址https://passport.lianjia.com/cas/login的Request Headers中,lianjia_ssid、lianjia_uuidJsessionID,其中lianjia_ssid、lianjia_uuid通過先訪問其他頁面獲取,現在接著去找名為JSESSIONID的Cookie,是從哪里來的,所以,能想到的,就是先去搜索JSESSIONID,搜索出來的第一個url地址是https://passport.lianjia.com/cas/prelogin/loginTicket?。很明顯,其就是我們所期望的,因為其中的JSESSIONID是通過Set-Cookie所獲得的,是訪問服務器的某個地址https://passport.lianjia.com/cas/prelogin/loginTicket?,然后服務器所返回的Cookie值。

鏈家的模擬登錄_07登錄Cookie

鏈家的模擬登錄_08JSESSIONID

而對于模擬登錄網站中,所涉及的其他Cookie、其他參數的值,可參考上述的邏輯,去一點點分析,找到最終的某個值的來源,然后才能用程序模擬。

總結模擬登錄鏈家的基本流程

至此,對于想要模擬登錄鏈家的內部邏輯過程,基本上清楚了。

順序 訪問地址 訪問類型 發送的數據 需要獲得/提取的返回的值
1 http://gz.lianjia.com/ GET lianjia_ssid, lianjia_uuid
2 https://passport.lianjia.com/cas/prelogin/loginTicket? GET 從返回的html中提取lt值,需要驗證返回的Cookie中,是否包含JSESSIONID
3 https://passport.lianjia.com/cas/login POST post data,其中lt值是之前提取出來的 驗證返回的html和Cookie

待解決問題

在通過Python實現的時候,利用如上的流程,發現實際上行不通,登錄失敗。這里提出幾個未解決的問題。

如何驗證模擬登錄網站已成功了呢?

按理,在通過最后一步訪問地址為https://passport.lianjia.com/cas/login時,帶上賬號、密碼、提取的lt值,已獲取JSESSIONID值的情況下,通過返回的html代碼或cookie值,是可以判斷模擬登錄網站已成功的,然而在進一步分析數據來源的時候,發現有一個lianjia_token在登錄后的頁面經常出現,不知在模擬登錄過程中是否需要用到?是否需要獲取到lianjia_token才算成功?也不知是如何得到的?和JS腳本是否有關系?

鏈家的模擬登錄_09登錄成功html

鏈家的模擬登錄_10登錄成功Cookie

鏈家的模擬登錄_11lianjia_token

微信公眾號「數據分析」,分享數據科學家的自我修養,既然遇見,不如一起成長。

數據分析


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 美姑县| 丹阳市| 射洪县| 平安县| 桃江县| 介休市| 涿州市| 高淳县| 沙雅县| 利川市| 安岳县| 中西区| 洮南市| 庆元县| 葫芦岛市| 新龙县| 华亭县| 科技| 石屏县| 永德县| 永兴县| 博兴县| 嘉黎县| 叶城县| 漠河县| 商南县| 阿拉善左旗| 讷河市| 龙泉市| 开远市| 连南| 星座| 合川市| 聂拉木县| 肇庆市| 苏尼特左旗| 偃师市| 南涧| 盖州市| 都匀市| 库车县|