日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:30日期:2022-07-05 10:47:14

寫在前面

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

環(huán)境搭建

Python 3.7.7環(huán)境,Mac電腦測試 Python內(nèi)置庫 第三方庫: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() ’’’登錄函數(shù)’’’ def login(self, username, password, crack_captcha_func=None, **kwargs): # 若參數(shù)中給入代理,則設(shè)置 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).contentdata = {’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’ # 破解網(wǎng)站來自: 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端類似,網(wǎng)址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() ’’’登錄函數(shù)’’’ 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).contentdata = {’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’ # 破解網(wǎng)站來自: 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)'})

到此這篇關(guān)于Python爬蟲破解登陸嗶哩嗶哩的方法的文章就介紹到這了,更多相關(guān)Python爬蟲破解登陸內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: python
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
97精品中文字幕| 精品免费视频| 午夜av一区| 欧美成人亚洲| 欧美二区视频| 一区久久精品| 亚洲高清毛片| 1024精品久久久久久久久| 久久精品主播| 亚洲第一精品影视| 欧美色图国产精品| 亚洲一级高清| 亚洲深夜av| 少妇精品导航| 欧美~级网站不卡| 欧美日韩激情| 亚洲综合欧美| 日韩一区二区三区在线看| 亚洲精品国产精品粉嫩| 亚洲91在线| 日韩欧美三区| 国产精品入口久久| 国产福利一区二区精品秒拍 | 国产精品tv| 精品国内亚洲2022精品成人| 国产精品不卡| 极品日韩av| 免费欧美一区| 免费成人在线观看| 国产欧美成人| av免费不卡国产观看| 99成人超碰| 蜜臀久久99精品久久久画质超高清 | 亚洲欧美一级| 欧美日韩亚洲一区二区三区在线| 国产免费av一区二区三区| 亚洲二区视频| 99久久久久| 国产精品黄色片| 蜜臀久久精品| 午夜电影亚洲| 亚洲精品大全| 国产精品久久国产愉拍| 神马午夜在线视频| 亚洲免费网址| 国产乱子精品一区二区在线观看| 国产成人77亚洲精品www| 在线日韩中文| 日韩精品一区二区三区中文字幕| 欧美国产免费| 成人片免费看| 日韩中文字幕91| 国产探花一区在线观看| 日本国产精品| 日韩不卡一二三区| 天堂av在线| 在线国产日韩| 国产精品二区不卡| 石原莉奈在线亚洲二区| 久久97视频| 亚洲综合不卡| 国产96在线亚洲| 欧美在线综合| 欧美aaaaaa午夜精品| 欧美日韩在线网站| 日韩综合一区二区三区| 国产在线日韩精品| 蜜臀精品久久久久久蜜臀| 精品美女在线视频| 亚洲深深色噜噜狠狠爱网站| 精品久久99| 亚洲一区av| 日韩精品一卡| 国产精品美女午夜爽爽| 香蕉国产精品| 久久精品国产福利| 久久国产精品亚洲77777| 欧美国产另类| 综合激情一区| 91精品综合| 日本aⅴ精品一区二区三区 | 精品日本视频| 亚洲九九精品| 亚洲精品一区三区三区在线观看| 日韩和欧美一区二区| 国内亚洲精品| 精品国产一区二区三区av片| 欧美永久精品| 亚洲一区二区毛片| 国产一区二区三区成人欧美日韩在线观看 | 欧美xxxx中国| 日韩一区二区久久| а√天堂8资源中文在线| 国产精品久久久久久妇女| 巨乳诱惑日韩免费av| 蜜桃精品在线| 红杏一区二区三区| 日本欧美一区二区在线观看| 亚洲免费成人| 视频福利一区| 国产在线一区不卡| 日韩国产欧美在线视频| 在线国产一区二区| 日韩av自拍| 国产精品成人自拍| 丝袜美腿亚洲色图| 欧美日韩一区二区综合| 国产资源在线观看入口av| 国产精品调教视频| 日韩精品社区| 六月丁香综合| 一区二区小说| 在线成人动漫av| 成人日韩在线| 正在播放日韩精品| 水蜜桃久久夜色精品一区| 久久香蕉网站| 免费日韩一区二区三区| 国产免费av一区二区三区| 日韩高清不卡在线| 亚洲欧美日韩综合国产aⅴ| 国产主播一区| 91精品国产乱码久久久久久久| 精精国产xxxx视频在线播放| 黄色aa久久| 欧美午夜三级| 亚洲有吗中文字幕| 日本伊人午夜精品| 在线日韩中文| 中文在线а√天堂| 国产情侣久久| 石原莉奈在线亚洲三区| 成人啊v在线| 久久婷婷国产| 久久国产日本精品| 91欧美在线| 久久尤物视频| 国产成人77亚洲精品www| 国产精品久久久久蜜臀| 91视频精品| 午夜精品成人av| 99成人超碰| 亚洲一区亚洲| 在线视频亚洲欧美中文| 亚洲精品护士| 国产亚洲一区| 美女视频免费精品| av在线最新| 久久久久午夜电影| 亚洲免费播放| 亚洲自啪免费| 亚洲精品日本| 国产亚洲欧美日韩在线观看一区二区| 国产精品一站二站| 亚洲+小说+欧美+激情+另类| 亚洲资源在线| 欧美综合二区| 日本 国产 欧美色综合| 日韩1区2区3区| 国产精品美女午夜爽爽| 韩国女主播一区二区三区| 神马久久午夜| 国产一级一区二区| 亚洲资源在线| 麻豆精品视频在线| 麻豆久久久久久| 97se综合| 香蕉久久国产| 国产精品主播| 天堂日韩电影| 亚洲伊人精品酒店| 欧美成人一二区| 久久在线电影| 日韩欧美三区| 国产成人精选| 婷婷亚洲五月| 日本成人一区二区| 水蜜桃精品av一区二区| 99在线|亚洲一区二区| 日本成人一区二区| 精品国产欧美日韩| 精品一区在线| 国产亚洲久久| 欧美亚洲在线日韩| 久久国产生活片100| 久久天堂精品| 日韩高清在线不卡| 一本大道色婷婷在线| 蜜桃一区二区三区在线观看| 欧美黄页在线免费观看| 欧美一区二区三区高清视频| 日韩中出av| 日韩大片在线观看| 亚洲3区在线| 久久精品二区三区| 日产欧产美韩系列久久99| xxxxx性欧美特大| 日韩成人精品一区二区三区 | 免费精品一区| 日韩视频一区二区三区在线播放免费观看|