抓取頁面數據的時候,有時候我們需要登陸才可以獲取頁面資源,那么我們需要登陸以后才可以跳轉到對應的資源頁面,那么我們需要通過模擬登陸,登陸成功以后再次去抓取對應的數據。
首先我們需要通過手動方式來登陸一下,查看一下如何請求登陸
通過下圖我們看到真正處理請求的頁面是login.php,登陸成功以后跳轉到index.php頁面,下面我們來模擬一下。
代碼實現
LOGIN_URL = 'http://yingxiao.chewumi.com/login.php' #請求的URL地址 DATA = {"username":'accountID',"passwd":'passwd'} #登錄系統的賬號密碼,也是我們請求數據 HEADERS = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36' #模擬登陸的瀏覽器 } RES = requests.post(LOGIN_URL,data=DATA,headers=HEADERS) #模擬登陸操作 print (RES.text) #打印返回的文本信息
下來我們請求其他的頁面看一下效果
RES1 = requests.get("http://yingxiao.chewumi.com/show.php?id=64621190") print(RES1.text)
此時我們登陸成功再次請求其他的頁面的時候,發現無法請求到對應的頁面,意味到剛才的模擬登陸只對當前的操作起作用,那么如何使用下面的請求繼續有效。實際過程中我們知道session過期,我們需要重新登陸,那么我們第一次登陸成功session,只對當前有效,所以我們再次登錄就登陸失敗,那么我們需要在session有效期內,把session保存,然后再次去請求其他的頁面。
def Get_Session(URL,DATA,HEADERS): '''保存登錄參數''' ROOM_SESSION = requests.Session() ROOM_SESSION.post(URL,data=DATA,headers=HEADERS) return ROOM_SESSION SESSION =Get_Session(LOGIN_URL,DATA,HEADERS) # 保存session后再次請求對應的地址 RES2 = SESSION.get("http://yingxiao.chewumi.com/show.php?id=64621190") print(RES2.text)
此時我們看到已經可以請求到對應的頁面了。