爬蟲之模擬登入總結

2021-08-09 02:12:50 字數 3556 閱讀 1967

有些**需要

登入

後才能爬取所需要的資訊,此時可以設計爬蟲進行模擬登入,原理是利用瀏覽器cookie。

一、瀏覽器訪問伺服器的過程

(1)瀏覽器(客戶端)向web伺服器發出乙個http請求(http request);

(2)web伺服器收到請求,發回響應資訊(http response);

(3)瀏覽器解析內容呈現給使用者。

二、利用

fiddler

檢視瀏覽器行為資訊:

http請求訊息

(1)起始行:包括請求方法、請求的資源、http協議的版本號

這裡get請求沒有訊息主體,因此訊息頭後的空白行中沒有其他資料。

(2)訊息頭:包含各種屬性

(3)訊息頭結束後的空白行

(4)可選的訊息體:包含資料

http響應訊息:

(1)起始行:包括http協議版本,http狀態碼和狀態

(2)訊息頭:包含各種屬性

(3)訊息體:包含資料

從上面可見,cookie在http請求和http響應的頭訊息中是很重要的屬性。

三、什麼是cookie

當使用者通過瀏覽器首次訪問乙個網域名稱時,訪問的web伺服器會給客戶端傳送資料,以保持web伺服器與客戶端之間的狀態,這些資料就是cookie。

它是站點建立的,為了辨別使用者身份而儲存在使用者本地終端上的資料,其中的資訊一般都是經過加密的,存在快取或硬碟中,在硬碟中是一些小文字檔案。

當訪問該**時,就會讀取對應**的cookie資訊。

作用

:記錄不同使用者的訪問狀態。

四、操作過程

在知乎登入介面輸入使用者名稱和密碼,然後登入。

利用fiddler來檢視這期間瀏覽器和知乎伺服器之間的資訊互動。

(1)瀏覽器給伺服器傳送了乙個post,攜帶帳號和密碼等資訊;

從起始行可見,post是傳送給這個**,內容在最下面訊息體裡,

也可以在fiddler的webforms標籤下檢視post的內容,如下:

可以發現,資訊裡不僅有帳號(email)和密碼(password),其實還有_xsrf(具體作用往後看)和remember_me(登入介面的「記住我」)兩個值。

那麼,在python爬蟲中將這些資訊同樣傳送,就可以模擬登入。

在傳送的資訊裡出現了乙個項:_xsrf,值為2fc4ab0f0f144c2e478c436fe3160443

這個項其實是在訪問知乎登入網頁時,網頁傳送過來的資訊,在瀏覽器原始碼中可見:

所以需要先從登入**獲取這個_xsrf的值,

並連同帳號、密碼等資訊再post到真正接收請求的**。

(2)獲取_xsrf的值:

爬取登入**,從內容中獲取_xsrf的值。

正規表示式。

(3)傳送請求:

xsrf = 獲取的_xsrf的值

data =

login = s.post(loginurl, data = data, headers = headers)

loginurl:是真正post到的**,不一定等同於登入頁面的**;

(4)爬取登入後的網頁:

response = s.get(geturl, cookies = login.cookies, headers = headers)

geturl:要爬取的登陸後的網頁;

login.cookies:登陸時獲取的cookie資訊,儲存在login中。

(5)輸出內容:

print response.content

五、具體**

[python]

view plain

copy

print?

# -*- coding:utf-8 -*-

# author:simon

# updatetime:2023年3月17日 17:35:35

# 功能:爬蟲之模擬登入,urllib和requests都用了...

import

urllib  

import

urllib2  

import

requests  

import

re  

headers =   

defget_xsrf():  

firsturl = 

""request = urllib2.request(firsturl,headers = headers)  

response = urllib2.urlopen(request)  

content = response.read()  

pattern = re.compile(r

'name="_xsrf" value="(.*?)"/>'

,re.s)  

_xsrf = re.findall(pattern,content)  

return_xsrf[0]  

deflogin(par1):  

s = requests.session()  

afterurl = 

""# 想要爬取的登入後的頁面

loginurl = 

""# post傳送到的**

login = s.post(loginurl, data = par1, headers = headers)                  

# 傳送登入資訊,返回響應資訊(包含cookie)

response = s.get(afterurl, cookies = login.cookies, headers = headers)    

# 獲得登陸後的響應資訊,使用之前的cookie

returnresponse.content  

xsrf = get_xsrf()  

print

"_xsrf的值是:"

+ xsrf  

data =   

print

login(data)  

六、補充:

用知乎網做完試驗,發現這裡好像並不需要傳送_xsrf這個值。

不過有的**在登陸時確實需要傳送類似這樣的乙個值,可以用上述方法。

python爬蟲之模擬登入

pip install requests post cid 137 pip install ddddocr基礎使用方法 print res 官方詳細用法 pip install fake useragent使用方法 from fake useragent import useragent ua us...

爬蟲 模擬登入

在一些爬蟲中,需要用到賬號登入進入,才能看到需要爬取的內容,因此實現程式自動模擬登入非常有必要。目前大部分 的登入,都是使用表單提交的方法實現的,這一類 的模擬登入,相信度娘已經給出來的許多例項。還有一類 不是使用網頁自帶表單提交的方法,自己實現了js方法來登入,這就需要進行特別的模擬瀏覽器行為。本...

爬蟲 模擬登入

模擬登入流程 對點選登入按鈕對應的請求進行傳送 post請求 處理請求引數 使用者名稱 密碼 驗證碼 其他的防偽引數 模擬登入cookie操作 1.手動cookie處理 通過抓包工具獲取cookie值,將該值封裝到headers中 2.自動處理cookie 模擬登入post請求後,cookie由伺服...