复制url直接能跳过验证_python 爬虫如何突破登录验证
我用 python 做爬蟲爬過不少數據,比如在 google play 爬應用信息;在 instragram, 500px 爬圖片;當然爬蟲的作用不止于此,比如定時去某個網站簽到,媽媽再也不用擔心我忘記簽到了
這些網站支持游客訪問,但要訪問特定內容,比如你收藏的圖片,或者要簽到,那前提是要登錄。
現在的網站登錄驗證是越來越復雜了,且不說那些真人都撓頭的驗證碼,就算是不需要驗證碼的網站,也各出奇招,像 gitee 是通過前端加密登錄信息,而 instagram 則是通過 url 里的 query_hash 以及 header 里的 X-CSRFToken,X-Instagram-GIS 來做校驗,對爬蟲很不友好,都不是那么容易登錄進去的
直接發送賬號密碼到登錄接口
有些淳樸的網站,其登錄校驗只要提供帳號密碼就行,通過瀏覽器抓包看下數據格式,然后照樣發起請求,就可以了
比如 500px,其登錄驗證幾乎沒有難度,代碼如下
# -*- coding: utf-8 -*-import requests
import json
from profile import email, password
session = requests.session()
if __name__ == '__main__':
url = 'https://api.500px.com/v1/session'
data = {
'session':
{
'email': email,
'password': password
}
}
headers = {'Content-Type': 'application/json'}
result = session.post(url, data=json.dumps(data), headers=headers)
print(result.text)
登錄成功后,網站會向客戶端寫入 cookie,后續訪問就一路暢通了,在 python 里則意味著我們需要用 session 發起后續請求
復雜的登錄校驗
這次以 gitee 為例,來研究下如何登錄,先用瀏覽器抓包看下 gitee 的登錄
gitee 登錄地址
gitee 登錄數據
可以看到要登錄 gitee,請求參數里有 authenticity_token 和 加密后的 password
這個 token 怎么來的?根據經驗判斷應該是藏在 gitee 登錄頁某處,感覺不難獲取;關鍵是這個 password 的加密,應該是某個 js 腳本的功勞,不過要逆向出 js 是如何加密的,的確是非常困難的。。。畢竟我們不是 js 執行引擎
如果無法逆向出這個加密算法,要怎么登錄呢?可以先用瀏覽器登錄,再把 cookie 復制出來給爬蟲使用
首先是復制 cookie,瀏覽器登錄 gitee 成功后,隨意抓個包就可以得到 cookie 了
gitee cookie
復制下來的 cookie 設置到爬蟲里,代碼如下
# -*- coding: utf-8 -*-import requests
session = requests.session()
if __name__ == '__main__':
headers = {
'Host': 'gitee.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
'Accept': 'application/json',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
}
url = 'https://gitee.com/api/v3/internal/my_resources'
result = session.get(url=url, headers=headers)
if result.status_code == 200:
print('success: \n%s' % (result.text))
else:
print(result.status_code)
headers['Cookie'] = '......'
result = session.get(url=url, headers=headers)
if result.status_code == 200:
print('success: \n%s' % (result.text))
else:
print(result.status_code)
執行結果如下
// 未設置 cookie 返回 401401
// 設置 cookie 后返回數據
success:
{"enterprises_count":0...}
可見,使用瀏覽器的 cookie 就可以達到爬蟲免登錄的效果了
程序自動獲取 cookie
瀏覽器抓包再復制 cookie 到爬蟲代碼,感覺有點 low,實際上 cookie 是保存在我們電腦上的,這樣瀏覽器才能做到記住登錄狀態功能
那么可以讓爬蟲自己讀取瀏覽器 cookie,從而避免我們抓包再復制嗎?答案是肯定的,考慮到文章篇幅,我將在下一篇文章里介紹如何用代碼讀取瀏覽器已存儲 cookie 來進行登錄,敬請期待
總結
以上是生活随笔為你收集整理的复制url直接能跳过验证_python 爬虫如何突破登录验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VISA
- 下一篇: Master Card