有些**需要
登入
後才能爬取所需要的資訊,此時可以設計爬蟲進行模擬登入,原理是利用瀏覽器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()
"_xsrf的值是:"
+ xsrf
data =
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由伺服...