抓取頁面數據的時候,有時候咱們須要登錄才能夠獲取頁面資源,那麼咱們須要登錄之後才能夠跳轉到對應的資源頁面,那麼咱們須要經過模擬登錄,登錄成功之後再次去抓取對應的數據。php
首先咱們須要經過手動方式來登錄一下,查看一下如何請求登錄瀏覽器
經過下圖咱們看到真正處理請求的頁面是login.php,登錄成功之後跳轉到index.php頁面,下面咱們來模擬一下。session
代碼實現post
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) #打印返回的文本信息
下來咱們請求其餘的頁面看一下效果spa
RES1 = requests.get("http://yingxiao.chewumi.com/show.php?id=64621190") print(RES1.text)
此時咱們登錄成功再次請求其餘的頁面的時候,發現沒法請求到對應的頁面,意味到剛纔的模擬登錄只對當前的操做起做用,那麼如何使用下面的請求繼續有效。實際過程當中咱們知道session過時,咱們須要從新登錄,那麼咱們第一次登錄成功session,只對當前有效,因此咱們再次登陸就登錄失敗,那麼咱們須要在session有效期內,把session保存,而後再次去請求其餘的頁面。code
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)
此時咱們看到已經能夠請求到對應的頁面了。blog