---恢復內容開始---
在完成前面的階段的任務之後,我們現在已經能夠嘗試著去模擬登入一些**了。在這裡我們模擬登入一下知乎做一下實驗。筆者在這裡總共用了三天多的時間,下面給大家分享一下筆者是怎麼一步一步的模擬登入成功的。也希望大家能夠吸取我的教訓。
初步的模擬登入
下面這段**是筆者最初寫的,我們慢慢來看
importrequests
login_data =
response = bs(requests.get('').content, 'html.parser')
xsrf = response.find('input',attrs=)['value']
login_data['_xsrf'] =xsrf
responed = ssesion.post('',headers=headers,data=login_data)
print(responed)
在最初的寫模擬登入知乎的時候,筆者也是通過抓包,發現了,cookie中有乙個_xsrf的屬性,類似於token的作用。而這個東西的存在,就讓我們在模擬登入的時候,必須將這個屬性作為引數一起加在請求中傳送出去,那麼怎麼獲得這個東西呢?似乎又是乙個問題。
我想到的方法,就是隨便訪問乙個頁面,然後再頁面元素中去定位到_xsrf這個字段,然後抓取下來,新增到data裡,在請求的時候一起發出去就可以了。
然後為什麼會去用ssesion去請求,因為在知乎上,它的xsrf是一直在變化的,我們每一次請求,它都在變。所以如果我們用requests去請求的話,就無法登入成功。
那麼上面這段**基本已經符合我們的要求了。我們執行看一下結果
traceback (most recent call last):
file "c:/users/administrator/pycharmprojects/practice/login_zhihu.py", line 20, in
xsrf = response.find('input',attrs=)['value']
typeerror: 'nonetype' object is not subscriptable
報錯了,獲取到的xsrf是空的,怎麼辦呢?嗯,根據這裡的報錯資訊顯示應該是型別錯誤,那就是獲取xsrf那一段有錯,我們單獨把那一段**拿出去執行看看結果。
定位並修復報錯資訊
既然知道了錯誤原因我們就去看看,到底是哪兒錯了,要怎麼解決。
首先,我單獨的把獲取xsrf那一段**拿出來執行
import requests
from bs4 import beautifulsoup as bs
response = bs(requests.get('').content, 'html.parser')
print(response)
xsrf = response.find('input',attrs=)['value']
print(xsrf)
在這裡,分開進行列印,以便檢視到底是走到哪一步出的錯。
執行這一段**得到結果如下顯示:
traceback (most recent call last):
file "c:/users/administrator/pycharmprojects/practice/login_zhihu.py", line 6, in
xsrf = response.find('input',attrs=)['value']
typeerror: 'nonetype' object is not subscriptable
an internal server error occured.
在這裡報了500,也就是說我們在get請求的那裡就已經出錯了,然後下方的xsrf也沒有獲取到。在這裡我首先想到的是先解決爬取的xsrf為空的問題,這裡實際上走入了乙個誤區。之所以會爬取xsrf失敗,實際上是由於在請求的時候就失敗了,導致根本獲取不到xsrf。所以應該是解決500的問題先。
那麼怎麼解決500問題呢?
經過前輩的教導,我在請求後面加上了headers,再次執行
print(xsrf)
好的,在執行看看:
899ce2556d7e705ca9bbf2b818a48d40
好的,這裡我們可以看到是成功的爬取到了xsrf的資訊,那麼我們將這段**在拿到之前的模擬登入的**中去看看。
成功模擬登入知乎
print(responed)
執行這段**得到的結果是
返回狀態為200,說明我們已經模擬登入成功了。經歷過蠻多挫折哈,光是錯誤定位那一塊兒,我就折騰了整整乙個晚上,還請教了好幾個程式設計師都沒有搞定。這裡提醒大家一下,可千萬不要犯我這樣的錯誤咯。在做爬蟲的時候,一定要記得請求的時候加上頭資訊。
---恢復內容結束---
Python 爬蟲模擬登陸知乎
在之前寫過一篇使用python爬蟲爬取電影天堂資源的部落格,重點是如何解析頁面和提高爬蟲的效率。由於電影天堂上的資源獲取許可權是所有人都一樣的,所以不需要進行登入驗證操作,寫完那篇文章後又花了些時間研究了一下python模擬登陸,網上關於這部分的資料很多,很多demo都是登陸知乎的,原因是知乎的登陸...
HttpClient 模擬登陸知乎
最近做爬蟲相關工作,我們平時用httpwebrequest比較多,每乙個url都要建立乙個httpwebrequest例項,而且有些 驗證比較複雜,在登陸及後續抓取資料的時候,每次請求需要把上次的cookie傳遞給這次請求。記得這篇部落格 結尾,dudu總結了 httpclient最與眾不同的地方是...
Mac模擬登陸知乎
10001 請求引數異常,請公升級客戶端後重試 mac 在terminal 先其中乙個終端,不要關閉 之後在python檔案中正常編寫 先來乙個測試檔案 coding utf 8 from selenium import webdriver from selenium.webdriver.chrom...