python模擬登陸知乎

2022-09-15 10:48:13 字數 2464 閱讀 5022

---恢復內容開始---

在完成前面的階段的任務之後,我們現在已經能夠嘗試著去模擬登入一些**了。在這裡我們模擬登入一下知乎做一下實驗。筆者在這裡總共用了三天多的時間,下面給大家分享一下筆者是怎麼一步一步的模擬登入成功的。也希望大家能夠吸取我的教訓。

初步的模擬登入

下面這段**是筆者最初寫的,我們慢慢來看

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...