前面已經介紹過,運用表單填寫賬號,用戶名的方式模擬登陸知乎。若登陸成功,則以後就能夠利用cookie登入,無需重複以前步驟。html
import requests import http.cookiejar from bs4 import BeautifulSoup session = requests.Session() session.cookies = http.cookiejar.LWPCookieJar("cookie") agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/5.1.2.3000 Chrome/55.0.2883.75 Safari/537.36' headers = { "Host": "www.zhihu.com", "Origin":"https://www.zhihu.com/", "Referer":"http://www.zhihu.com/", 'User-Agent':agent } postdata = { 'password': '*******', #填寫密碼 'account': '********', #填寫賬號 } response = session.get("https://www.zhihu.com", headers=headers) soup = BeautifulSoup(response.content, "html.parser") xsrf = soup.find('input', attrs={"name": "_xsrf"}).get("value") postdata['_xsrf'] =xsrf result = session.post('http://www.zhihu.com/login/email', data=postdata, headers=headers) session.cookies.save(ignore_discard=True, ignore_expires=True)
運行後,在代碼所在文件夾中出現cookie文件。cookie
如今加載cookie登陸:session
import requests import http.cookiejar as cookielib session = requests.session() session.cookies = cookielib.LWPCookieJar(filename='cookie') try: session.cookies.load(ignore_discard=True) except: print("Cookie 未能加載") def isLogin(): url = "https://www.zhihu.com/" login_code = session.get(url, headers=headers, allow_redirects=False).status_code if login_code == 200: return True else: return False if __name__ == '__main__': agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/5.1.2.3000 Chrome/55.0.2883.75 Safari/537.36' headers = { "Host": "www.zhihu.com", "Origin": "https://www.zhihu.com/", "Referer": "http://www.zhihu.com/", 'User-Agent': agent } if isLogin(): print('您已經登陸')
運行後顯示:您已經登陸。函數
cookielib模塊的主要做用是提供可存儲cookie的對象,以便於requests模塊配合使用來訪問Internet資源。Cookielib模塊很是強大,咱們能夠利用本模塊的CookieJar類的對象來捕獲cookie並在後續鏈接請求時從新發送,好比能夠實現模擬登陸功能。該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。post
它們的關係:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJarurl
默認的是FileCookieJar沒有實現save函數。spa
而MozillaCookieJar或LWPCookieJar都已經實現了。code
因此能夠用MozillaCookieJar或LWPCookieJar,去自動實現cookie的save。htm
CookieJar 對象
/
FileCookieJar
/ \
MozillaCookieJar LWPCookieJar