Python爬蟲 破解登陸嗶哩嗶哩的方法!

2021-03-02 python教程

這篇文章主要介紹了Python爬蟲破解登陸嗶哩嗶哩的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

寫在前面

作為一名找不到工作的爬蟲菜雞人士來說,登陸這一塊肯定是個比較大的難題。
 從今天開始準備一點點對大型網站進行逐個登陸破解。加深自己爬蟲水平。

環境搭建

Python 3.7.7環境,Mac電腦測試

Python內置庫

第三方庫:rsa、urllib、requests

PC端登陸

全部代碼:

'''PC登錄嗶哩嗶哩'''

class Bilibili_For_PC():

def __init__(self, **kwargs):

for key, value in kwargs.items(): setattr(self, key, value)

self.session = requests.Session()

self.__initialize()

'''登錄函數'''

def login(self, username, password, crack_captcha_func=None, **kwargs):

# 若參數中給入代理,則設置

self.session.proxies.update(kwargs.get('proxies', {}))

# 是否需要驗證碼

is_need_captcha = False

while True:

# 需要驗證碼

if is_need_captcha:

captcha_img = self.session.get(self.captcha_url, headers=self.captcha_headers).content

data = {'image': base64.b64encode(captcha_img).decode('utf-8')}

captcha = self.session.post(self.crack_captcha_url, json=data).json()['message']

# 獲得key值

appkey = '1d8b6e7d45233436'

data = {

'appkey': appkey,

'sign': self.__calcSign('appkey={}'.format(appkey))

}

response = self.session.post(self.getkey_url, data=data)

response_json = response.json()

key_hash = response_json['data']['hash']

pub_key = rsa.PublicKey.load_pkcs1_openssl_pem(response_json['data']['key'].encode('utf-8'))

# 模擬登錄

if is_need_captcha:

data = "access_key=&actionKey=appkey&appkey={}&build=6040500&captcha={}&challenge=&channel=bili&cookies=&device=pc&password={}&permission=ALL&seccode=&subid=1&ts={}&username={}&validate=" \

.format(appkey, captcha, urllib.parse.quote_plus(base64.b64encode(rsa.encrypt('{}{}'.format(key_hash, password).encode(), pub_key))), int(time.time()), urllib.parse.quote_plus(username))

else:

data = "access_key=&actionKey=appkey&appkey={}&build=6040500&captcha=&challenge=&channel=bili&cookies=&device=pc&password={}&permission=ALL&seccode=&subid=1&ts={}&username={}&validate=" \

.format(appkey, urllib.parse.quote_plus(base64.b64encode(rsa.encrypt('{}{}'.format(key_hash, password).encode(), pub_key))), int(time.time()), urllib.parse.quote_plus(username))

data = "{}&sign={}".format(data, self.__calcSign(data))

response = self.session.post(self.login_url, data=data, headers=self.login_headers)

response_json = response.json()

# 不需要驗證碼, 登錄成功

if response_json['code'] == 0 and response_json['data']['status'] == 0:

for cookie in response_json['data']['cookie_info']['cookies']:

self.session.cookies.set(cookie['name'], cookie['value'], domain='.bilibili')

print('[INFO]: Account -> %s, login successfully' % username)

infos_return = {'username': username}

infos_return.update(response_json)

return infos_return, self.session

# 需要識別驗證碼

elif response_json['code'] == -105:

is_need_captcha = True

# 帳號密碼錯誤

elif response_json['code'] == -629:

raise RuntimeError('Account -> %s, fail to login, username or password error' % username)

# 其他錯誤

else:

raise RuntimeError(response_json.get('message'))

'''計算sign值'''

def __calcSign(self, param, salt="560c52ccd288fed045859ed18bffd973"):

sign = hashlib.md5('{}{}'.format(param, salt).encode('utf-8'))

return sign.hexdigest()

'''初始化'''

def __initialize(self):

# 登陸請求頭

self.login_headers = {'Content-type': 'application/x-www-form-urlencoded'}

# 破解驗證碼請求頭

self.captcha_headers = {'Host': 'passport.bilibili.com'}

# 獲取key密鑰URL

self.getkey_url = 'https://passport.bilibili.com/api/oauth2/getKey'

# 獲取登陸URL

self.login_url = 'https://passport.bilibili.com/api/v3/oauth2/login'

# 獲取驗證碼URL

self.captcha_url = 'https://passport.bilibili.com/captcha'

# 破解網站來自: https://github.com/Hsury/Bilibili-Toolkit

# 破解驗證碼URL

self.crack_captcha_url = 'https://bili.dev:2233/captcha'

# 請求頭都得加這個

self.session.headers.update({'User-Agent': "Mozilla/5.0 BiliDroid/5.51.1 (bbcallen@gmail.com)"})

移動端登陸

移動端與PC端類似,網址URL差異以及請求頭差異。在此不過多介紹。
 全部代碼:

'''移動端登錄B站'''

class Bilibili_For_Mobile():

def __init__(self, **kwargs):

for key, value in kwargs.items(): setattr(self, key, value)

self.session = requests.Session()

self.__initialize()

'''登錄函數'''

def login(self, username, password, crack_captcha_func=None, **kwargs):

self.session.proxies.update(kwargs.get('proxies', {}))

# 是否需要驗證碼

is_need_captcha = False

while True:

# 需要驗證碼

if is_need_captcha:

captcha_img = self.session.get(self.captcha_url, headers=self.captcha_headers).content

data = {'image': base64.b64encode(captcha_img).decode('utf-8')}

captcha = self.session.post(self.crack_captcha_url, json=data).json()['message']

# 獲得key值

appkey = 'bca7e84c2d947ac6'

data = {

'appkey': appkey,

'sign': self.__calcSign('appkey={}'.format(appkey))

}

response = self.session.post(self.getkey_url, data=data)

response_json = response.json()

key_hash = response_json['data']['hash']

pub_key = rsa.PublicKey.load_pkcs1_openssl_pem(response_json['data']['key'].encode('utf-8'))

# 模擬登錄

if is_need_captcha:

data = "access_key=&actionKey=appkey&appkey={}&build=6040500&captcha={}&challenge=&channel=bili&cookies=&device=phone&mobi_app=android&password={}&permission=ALL&platform=android&seccode=&subid=1&ts={}&username={}&validate=" \

.format(appkey, captcha, urllib.parse.quote_plus(base64.b64encode(rsa.encrypt('{}{}'.format(key_hash, password).encode(), pub_key))), int(time.time()), urllib.parse.quote_plus(username))

else:

data = "access_key=&actionKey=appkey&appkey={}&build=6040500&captcha=&challenge=&channel=bili&cookies=&device=phone&mobi_app=android&password={}&permission=ALL&platform=android&seccode=&subid=1&ts={}&username={}&validate=" \

.format(appkey, urllib.parse.quote_plus(base64.b64encode(rsa.encrypt('{}{}'.format(key_hash, password).encode(), pub_key))), int(time.time()), urllib.parse.quote_plus(username))

data = "{}&sign={}".format(data, self.__calcSign(data))

response = self.session.post(self.login_url, data=data, headers=self.login_headers)

response_json = response.json()

# 不需要驗證碼, 登錄成功

if response_json['code'] == 0 and response_json['data']['status'] == 0:

for cookie in response_json['data']['cookie_info']['cookies']:

self.session.cookies.set(cookie['name'], cookie['value'], domain='.bilibili')

print('[INFO]: Account -> %s, login successfully' % username)

infos_return = {'username': username}

infos_return.update(response_json)

return infos_return, self.session

# 需要識別驗證碼

elif response_json['code'] == -105:

is_need_captcha = True

# 帳號密碼錯誤

elif response_json['code'] == -629:

raise RuntimeError('Account -> %s, fail to login, username or password error' % username)

# 其他錯誤

else:

raise RuntimeError(response_json.get('message'))

'''計算sign值'''

def __calcSign(self, param, salt="60698ba2f68e01ce44738920a0ffe768"):

sign = hashlib.md5('{}{}'.format(param, salt).encode('utf-8'))

return sign.hexdigest()

'''初始化'''

def __initialize(self):

self.login_headers = {

'Content-type': 'application/x-www-form-urlencoded'

}

self.captcha_headers = {

'Host': 'passport.bilibili.com'

}

self.getkey_url = 'https://passport.bilibili.com/api/oauth2/getKey'

self.login_url = 'https://passport.bilibili.com/api/v3/oauth2/login'

self.captcha_url = 'https://passport.bilibili.com/captcha'

# 破解網站來自: https://github.com/Hsury/Bilibili-Toolkit

self.crack_captcha_url = 'https://bili.dev:2233/captcha'

self.session.headers.update({'User-Agent': "Mozilla/5.0 BiliDroid/5.51.1 (bbcallen@gmail.com)"})

到此這篇關於Python爬蟲破解登陸嗶哩嗶哩的方法的文章就介紹到這了

掃下方二維碼加老師微信

或是搜索老師微信號:XTUOL1988【切記備註學習Python】

領取Python web開發,Python爬蟲,Python數據分析,人工智慧等學習教程。帶你從零基礎系統性的學好Python!

也可以加老師建的Python技術學習教程qq裙:245345507,二者加一個就可以!

歡迎大家點讚,留言,轉發,轉載,感謝大家的相伴與支持

萬水千山總是情,點個【在看】行不行

*聲明:本文於網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯繫我們刪除或授權事宜

相關焦點

  • Python爬蟲模擬登陸嗶哩嗶哩(bilibili)並突破點選驗證碼功能
    寫在前面今天帶給大家一個突破點選驗證碼的案例,利用爬蟲模擬登陸嗶哩嗶哩,並且把一些採坑的地方給大家強調一下!一、需求分析模擬登陸嗶哩嗶哩網站連結: https://passport.bilibili.com/login效果圖如下:驗證成功後會自動跳轉B站的登錄界面,為了保護我的信息安全
  • python 導航框 | 嗶哩嗶哩推薦100萬收藏的導航網頁
    import timefrom tkinter import *gwin=Noneimport webbrowserdef cmd(x): def innerCmd():#innerCmd是個閉包 if x==0: value=webbrowser.open("https://www.52pojie.cn/") #吾愛破解
  • 嗶哩嗶哩33卡多少錢 嗶哩嗶哩33卡資費怎麼算
    嗶哩嗶哩33卡是近期嗶哩嗶哩推出的免流卡一種,不過很多觀眾想申請免流卡但是不清楚嗶哩嗶哩33卡多少錢,嗶哩嗶哩33卡資費怎麼算,小編來給大家做個詳細的介紹。  嗶哩嗶哩33卡多少錢?嗶哩嗶哩33卡資費怎麼算?
  • 嗶哩嗶哩大會員免費領取試用 嗶哩嗶哩vip共享資格兌換_18183專區
    18183首頁 嗶哩嗶哩大會員免費領取試用 嗶哩嗶哩vip共享資格兌換 嗶哩嗶哩大會員免費領取試用 嗶哩嗶哩vip共享資格兌換
  • 嗶哩嗶哩漫畫app在線觀看
    嗶哩嗶哩漫畫是一款B站出的最新手機看漫畫神器,嗶哩嗶哩漫畫擁有全網更新最全的漫畫資源資訊,用戶在這裡可以輕鬆的找到自己喜歡的漫畫。用戶使用B站帳號即可登錄嗶哩嗶哩漫畫app,享受海量免費正版漫畫閱讀。
  • 《嗶哩嗶哩》自動更新設置教程
    嗶哩嗶哩是有自動更新功能的,如果開啟了該功能,出了新版本後,系統將會自動檢測更新,為你下載最新版本的嗶哩嗶哩安裝包。那麼b站自動更新怎麼關呢?可能有的小夥伴就不太清楚了。下面小編就來為大家介紹一下嗶哩嗶哩自動更新的設置教程。
  • 《嗶哩嗶哩》蟲皇是什麼梗
    《嗶哩嗶哩》最近出現了一個梗,這一個梗也是最近讓人比較氣憤的一件事情。這一個梗就是「蟲皇」。這一個梗肯定沒有太多人知道是什麼意思吧?接下來小編就給各位玩家小夥伴詳細的說一說《嗶哩嗶哩》蟲皇是什麼梗,一起來看看吧。
  • 《嗶哩嗶哩》知名up主申請認證教程
    想要進行嗶哩嗶哩知名UP主認證,是需要滿足一定條件的,只要滿足了要求,就可以前往進行認證申請了。b站怎麼認證知名up?本文就將為大家介紹嗶哩嗶哩知名up主申請認證教程,快一起來看看吧! b站怎麼認證知名up? 1、在嗶哩嗶哩主頁面點擊「我的」。
  • B站客戶端動態怎麼發 手機嗶哩嗶哩app發動態方法
    很多人可能覺得嗶哩嗶哩僅僅是個看視頻的網站,其實不然,小破站其實還有很多功能等著你發覺,相信很多小夥伴都發現了最近很多UP可以直接文字動態還不發視頻了,就像朋友圈一樣,那麼怎麼在B戰客戶端發自己的動態呢?
  • 如何評價嗶哩嗶哩舞姬「咬人貓」?
    熟悉嗶哩嗶哩的小夥伴都知道,早期的B站充斥著宅舞視頻、鬼畜視頻以及豐富的動漫和漫畫。但近年來,有關於學習、生活的vlog視頻逐漸增加,給人一種B站正在偏離二次元的感覺。然而,不管是早期的嗶哩嗶哩,還是現在的嗶哩嗶哩,「咬人貓」舞姬都算是B站的一大紅人,在嗶哩嗶哩擁有百萬粉絲,與B站擁有深度合作。關於如何評價嗶哩嗶哩舞姬「咬人貓」,啟蒙君想從以下幾個角度來評價:顏值:說實話,「咬人貓」的顏值只能算作一般,算不上特別引人注目的大美女。
  • 《嗶哩嗶哩》大力電鋸人是什麼梗
    《嗶哩嗶哩》裡面最近出現了一個大家非常熟悉的梗,這一個梗就是「大力電鋸人」。《電鋸人》是一個非常有意思的漫畫,應該也是有不少人知道的吧?接下來小編就給各位玩家小夥伴帶來了《嗶哩嗶哩》大力電鋸人是什麼梗,感興趣的小夥伴可以跟隨小編一起來看一看。
  • 嗶哩嗶哩(B站)將嘀哩嘀哩(D站)告上法庭?!
    最近,小熊麻麻的百度新聞推薦裡面有嗶哩嗶哩將嘀哩嘀哩告上了法庭。我累個去啊~這兩個我能說我都非常喜歡嗎?!說一下嗶哩嗶哩吧,話說,我跟B站的猿糞啊,就在於搜索一些視頻類網站,上傳我們的宣傳片,然後呢,就與B站結緣。
  • 《嗶哩嗶哩》Da me da ne是什麼梗
    在《嗶哩嗶哩》的評論區裡面,有著非常多的人才。這些人總是能夠創造出一些非常搞笑或者是非常有內涵的梗。就比如今天小編要說的:Da me da ne。接下來,小編就給各位玩家小夥伴帶來了《嗶哩嗶哩》Da me da ne是什麼梗,有不清楚的玩家可以一起來看一看。
  • 《嗶哩嗶哩》嘰嘰叭叭嘰叭叭是什麼梗
    《嗶哩嗶哩》裡面最近有一個非常有意思的,有關歌的一個梗。這一個梗就是「嘰嘰叭叭嘰叭叭」。聽起來是不是感覺有些汙呢?事實上,這的確是一首歌的歌詞,而且還是一首兒歌哦!接下來小編就給各位玩家小夥伴詳細的說一說《嗶哩嗶哩》嘰嘰叭叭嘰叭叭是什麼梗,一起來看看吧。
  • 2020嗶哩嗶哩vip免費領取 bilibili影視資源看不停
    18183首頁 2020嗶哩嗶哩vip免費領取 bilibili影視資源看不停 2020嗶哩嗶哩vip免費領取 bilibili影視資源看不停
  • 嗶哩嗶哩電競:三年時間,「後浪」初長成
    這已經不是嗶哩嗶哩電競第一次參與並推動電競大師賽了。2019年年末嗶哩嗶哩電競成為上海大師賽的創始合作夥伴及承辦方,首次向行業展示嗶哩嗶哩電競的賽事製作能力,參與操盤整套賽事執行規劃賽,推進賽事線上直播、線下落地等方案。
  • 產業開發、電競文化兩手抓,嗶哩嗶哩電競很B站
    嗶哩嗶哩電競作為賽事承辦方,可以說以優異的成績順利通過了疫情大考,展現出了專業的賽事運營及制播能力.嗶哩嗶哩電競加速競核了解到,疫情之下,電競上海大師賽遇到了更多的挑戰。比如,如何做好防疫措施,確保現場觀眾、選手和工作人員的安全;如何保障國內外選手線上、線下比賽的流暢性等等。
  • 嘀哩嘀哩與嗶哩嗶哩?警惕商標侵權風險
    明月本期熱點:B站與D站商標侵權糾紛01.事件概述近段時間,嗶哩譁哩彈幕網04.附:案例分析「嗶哩譁哩」訴「嘀哩嘀哩」商標侵權案關鍵詞:商標侵權案情概述嗶哩譁哩彈幕網(以下簡稱「B站」)的主辦單位上海寬娛數碼科技有限公司訴經營嘀哩嘀哩網站(以下簡稱「D站」)。
  • 《嗶哩嗶哩》充滿了快活的空氣是什麼梗
    《嗶哩嗶哩》的評論區經常會出現一些非常有意思的梗,其中的一個梗就是:「充滿了快活的空氣」。這一個梗應該是有不少人都感覺非常的熟悉的。那麼,大家知道是什麼意思嗎?接下來,小編就給各位玩家小夥伴帶來了《嗶哩嗶哩》充滿了快活的空氣是什麼梗,有不清楚的玩家可以一起來看一看。
  • 嗶哩嗶哩產品分析報告——與年輕人一同駛向星辰大海
    這樣的標籤擴充讓嗶哩嗶哩不止於將用戶定位在二次元人群,而廣泛地定位在使用網際網路的年輕人群。2020年嗶哩嗶哩發布的《後浪》裡談到:「你們把自己的熱愛變成了一個和成千上萬的人分享快樂的事業」;嗶哩嗶哩逐漸變成一個年輕人的社區,讓人越來越期待嗶哩嗶哩與年輕人一起帶給這個時代更多的精彩。