日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

复制url直接能跳过验证_python 爬虫如何突破登录验证

發布時間:2023/12/10 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 复制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 返回 401
401

// 設置 cookie 后返回數據
success:
{"enterprises_count":0...}

可見,使用瀏覽器的 cookie 就可以達到爬蟲免登錄的效果了

程序自動獲取 cookie

瀏覽器抓包再復制 cookie 到爬蟲代碼,感覺有點 low,實際上 cookie 是保存在我們電腦上的,這樣瀏覽器才能做到記住登錄狀態功能

那么可以讓爬蟲自己讀取瀏覽器 cookie,從而避免我們抓包再復制嗎?答案是肯定的,考慮到文章篇幅,我將在下一篇文章里介紹如何用代碼讀取瀏覽器已存儲 cookie 來進行登錄,敬請期待

總結

以上是生活随笔為你收集整理的复制url直接能跳过验证_python 爬虫如何突破登录验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。