相信很多python學習者都和我一樣在剛開始學習爬蟲時,對見到的網站都有種躍躍欲試的沖動,像豆瓣電影、電影天堂以及各類壁紙寫真圖片網站的等等,但這些都是不需要登陸賬號就可以直接請求解析網頁獲取資源鏈接的,如果遇到需要登陸賬號的網站時就不行了。這個時候小編就及時出來解決大家的問題,給大家准備了一份模擬登陸代碼供大家學習。
環境准備
python3.5
selenium模塊
模擬登陸思路
通過selenium中的webdriver控制瀏覽器登錄目標網站,然后獲取模擬登陸需要的Cookie,再利用此Cookie來達到登錄的效果。本次我們使用webdriver來驅動火狐瀏覽器插件。在登錄網站時,cookie保存在發起請求的客戶端中,網站服務器利用cookie來區分不同的客戶端。cookie里面記錄了“訪問登錄后才能看到的頁面”這一行為的信息,含有能夠向服務器證明:“我剛才登錄過”。因此cookie可以用來標識客戶端的身份,以存儲它的信息。
登錄步驟
導入模塊
from selenium import webdriver
import requests
import json
啟動瀏覽器
通過webdriver驅動火狐瀏覽器,然后在加載將要訪問的目標網站
driver = webdriver.Firefox()
driver.get(“將要訪問的網址”)
點擊登錄
找到網頁中登錄按鈕所在的位置,通過瀏覽器模擬點擊打開登錄框,然后找到用戶名和密碼框的位置,輸入用戶名及密碼,在尋找按鈕以及密碼輸入框時可鼠標右鍵然后找到“查看元素”選項,點擊之后可在網頁源碼中尋找。代碼如下
#登錄按鈕打開登錄框
driver.find_element_by_xpath("./*//button[@type='submit']").click()
#清空賬號框中的內容
driver.find_element_by_xpath("./*//input[@name='username']").clear()
#填入登錄用戶名
driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user)
#清空密碼框中的內容
driver.find_element_by_xpath("./*//input[@name='password']").clear()
#自動填入登錄密碼
driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password)
#輸入好用戶名及密碼后點擊登錄
driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click()
記錄cookie
經過上面幾步,如果沒有報錯的話就說明已經登錄成功了,接下來我們再次加載網頁獲取登錄cookie。代碼如下
driver.get('網址')
獲取cookie
cookie_items = driver.get_cookies()
for cookie_item in cookie_items:
post[cookie_item['name']] = cookie_item['value']
cookie_str = json.dumps(post)
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
通過cookie登錄
獲得cookie之后,模擬登陸就跟之前一樣用requests請求網站,只需要將cookie內容加到請求中即可。代碼如下
header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0" }
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
res = requests.get(url=url, cookies=cookies,headers=header)
對於有些網站來說,cookie的生命期較長,所以在第一次登陸獲取cookie后,在以后模擬登陸時只需要調用此cookie即可,十分方便。
最后,相信有了這份代碼,能在您爬取網站需要登錄時提供幫助,完整代碼獲取可在公眾號《python練手項目實戰》中回復“login”。python練手項目實戰,分享更多python學習項目,在實戰中成長,在實戰中進步。