python课设总结_Python技术分享课总结:用Python模拟知乎自动登录
原標題:Python技術(shù)分享課總結(jié):用Python模擬知乎自動登錄
Python語言是由Guido van Rossum大牛在1989年發(fā)明,它是當今世界最受歡迎的計算機編程語言之一,也是一門“學了有用、學了能用、學會能久用”的計算生態(tài)語言。
為此,CSDN作為國內(nèi)最大的IT中文社區(qū),特向廣大Python愛好者開設(shè)了Python學習班,幫助大家在學習的道路上少走彎路,事半功倍。3月29號晚上8點,我們特邀請知名Python技術(shù)專家劉志軍老師在班級里舉行分享活動。
劉志軍,6年開發(fā)經(jīng)驗,曾就職中興、博雅互動。擅長Web技術(shù)架構(gòu),對爬蟲、數(shù)據(jù)挖掘領(lǐng)域興趣濃厚。目前在一家大型醫(yī)藥集團從事數(shù)據(jù)分析工作。微信公眾號:Python之禪(vttalk)。
以下為昨晚的分享內(nèi)容:
前言
文章會按照先原理,再實踐的方式來講解,希望可以做到知其然且知其所以然,讀這篇文章前,你需要對 HTTP 協(xié)議、 Cookies、跨站請求偽造(CSRF)有一定了解,如果你不太了解這些概念,文末給出了兩個鏈接推薦閱讀。
在做爬蟲時,有些頁面在登錄之前,是被禁止抓取的,比如我們查看知乎的話題頁面 https://www.zhihu.com/topic 就要求我 們登錄。
當提到「登錄」時,就不得不提 Cookie 技術(shù),而說起 Cookie 技術(shù)時,還得從 HTTP 協(xié)議說起。當然在這里我不會把HTTP 從0到1講一遍,你只需要了解基本的 HTTP 流程是什么就可以了,推薦閱讀我之前在公眾號「Python之禪」中寫的另一篇文章一次完整的HTTP請求過程HTTP 是一種無狀態(tài)的協(xié)議, 協(xié)議本身不保留之前的一切請求信息和響應信息,也就是說,對于一個剛剛發(fā)送了HTTP 請求的客戶端再次發(fā)起請求時,服務端并不知道之前訪問過。這樣設(shè)計的理由是為了更快地處理大量事務,確保協(xié)議的可伸縮性,而特意把 HTTP 協(xié)議設(shè)計如此簡單。
但是,無狀態(tài)導致業(yè)務處理就變得棘手了,一個簡單的例子就是網(wǎng)上購物的時候,當我在一個頁面把商品加入購物車的時候,正當我要跳轉(zhuǎn)到支付頁面時,如果沒有一種機制來保持我的登錄狀態(tài),那么之前選的商品全部丟失了。
因此,為了在無狀態(tài)的 HTTP 協(xié)議之上維護會話狀態(tài),使服務?可以知道當前是和哪個客戶端打交道,于是Cookie 技術(shù)應運而生 ,Cookie 通俗的理解就是服務端分配給客戶端的一個標識。
Cookie原理其實也非常簡單,總共4個步驟維護HTTP會話。
1. 瀏覽?第一次發(fā)起 HTTP 請求時,沒有攜帶任何 Cookie 信息,服務?收到請求并返回給瀏覽?的HTTP響應,同時
HTTP 響應包括了一個響應頭 Set-Cookie 字段,它的值是要設(shè)置的 Cookie。
2. 瀏覽?收到來自服務?的 HTTP 響應,響應頭中發(fā)現(xiàn)有 Set-Cookie 字段,就會將該字段的值保存在內(nèi)存或者硬盤中。
3. 瀏覽?下次給該服務?發(fā)送 HTTP 請求時, 會將 Cookie 信息附加在 HTTP 請求的頭字段 Cookie 中。
4. 服務?收到這個HTTP請求,發(fā)現(xiàn)請求頭中有Cookie字段, 便知道之前就和這個用戶打過交道了。
理解了 Cookie 的基本原理之后,我們就可以嘗試用 Python 來實現(xiàn)模擬知乎登錄。
用過知乎的都知道,只要提供用戶名和密碼以及驗證碼之后即可登錄。當然,這只是我們眼中看到的,而背后隱藏的技術(shù)細節(jié)還需要借助瀏覽?來發(fā)覺。現(xiàn)在我們就用 Chrome 來查看當我們填完表單后,點擊登錄的時候究竟發(fā)生了什么?
首先進入知乎的登錄頁面 https://www.zhihu.com/#signin ,打開 Chrome 的開發(fā)者工具條(按 F12)先嘗試輸入一個錯誤的驗證碼觀察瀏覽?是如何發(fā)送請求的。
從瀏覽?的請求可以發(fā)現(xiàn)幾個關(guān)鍵的信息:
1. 登錄的 URL 地址是 https://www.zhihu.com/login/email
2. 登錄需要提供的表單數(shù)據(jù)有4個:用戶名(email)、密碼(password)、驗證碼(captcha)、_xsrf。
3. 獲取驗證碼的URL地址是 https://www.zhihu.com/captcha.gif?r=1490690391695&type=login
那么 _xsrf 參數(shù)是什么?如果你對CSRF(跨站請求偽造)攻擊非常熟悉的話,那么你一定知道它的作用,xsrf是一串偽隨機數(shù),它是用于防止跨站請求偽造的。它一般存在網(wǎng)頁的 form 表單標簽中,為了證實這一點,可以在頁面上搜索 “xsrf”,果然,從下圖可以看到 _xsrf在一個隱藏的 input 標簽中 。
到這里,基本上摸清了瀏覽?登錄時所需要的數(shù)據(jù)是如何獲取的了,那么現(xiàn)在就可以開始擼代碼用 Python 模擬瀏覽?來登錄。登錄時所依賴的兩個第三方庫是 requests 和 BeautifulSoup,先安裝。
pip install beautifulsoup4==4.5.3
pip install requests==2.13.0
獲取 xsrf
前面已經(jīng)找到了 xsrf 所在的標簽,,
利用 BeatifulSoup的find方法可以非常便捷的獲取該值,當然,如果你熟悉正則表達式,也可以不用 BeatifulSoup
defget_xsrf():response = session.get("https://www.zhihu.com", headers=headers)soup = BeautifulSoup(response.content, "html.parser")xsrf = soup.find('input', attrs={"name": "_xsrf"}).get("value")returnxsrf
獲取驗證碼
驗證碼是通過 /captcha.gif 接口返回的,這里我們把驗證碼圖片下載保存到當前目錄,由人工識別,當然你可以用第三方支持庫來自動識別,比如pytesser。
defget_captcha():"""把驗證碼圖片保存到當前目錄,手動識別驗證碼:return:"""t = str(int(time.time() * 1000))captcha_url = 'https://www.zhihu.com/captcha.gif?r='+ t + "&type=login"r = session.get(captcha_url, headers=headers)withopen('captcha.jpg', 'wb') asf:f.write(r.content)captcha = input("驗證碼:")returncaptcha
登錄
一切參數(shù)準備就緒之后,就可以請求登錄接口了。
deflogin(email, password):login_url = 'https://www.zhihu.com/login/email'data = {'email': email,'password': password,'_xsrf': get_xsrf(),"captcha": get_captcha(),'remember_me': 'true'}response = session.post(login_url, data=data, headers=headers)login_code = response.json()print(login_code['msg'])session.cookies.save()
最后運行返回的結(jié)果是“登錄成功”。表明登錄成功了。細心的你可能已經(jīng)發(fā)現(xiàn)了,我調(diào)用了一個 cookies.save() 方法,我是把cookie信息保存到了本地,下次請求其他需要登錄的頁面時,就可以把 cookie信息攜帶上了。
session = requests.session()session.cookies = cookiejar.LWPCookieJar(filename='cookies')try:session.cookies.load(ignore_discard=True)except:print("還沒有cookie信息")
源碼:https://github.com/lzjun567/crawler_html2pdf/blob/master/zhihu/auto_login.py
CSDN Python學習班組織的【攢課】活動正在火熱進行中,歡迎Python愛好者報名參與:Python數(shù)據(jù)分析實戰(zhàn),掃描報名!返回搜狐,查看更多
責任編輯:
總結(jié)
以上是生活随笔為你收集整理的python课设总结_Python技术分享课总结:用Python模拟知乎自动登录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 防晒喷雾能带上地铁吗(哪些喷雾可以带上地
- 下一篇: win7如何设置动态壁纸(win7怎么设