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

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

Python爬蟲(chóng)破解登陸嗶哩嗶哩的方法

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

寫(xiě)在前面

作為一名找不到工作的爬蟲(chóng)菜雞人士來(lái)說(shuō),登陸這一塊肯定是個(gè)比較大的難題。 從今天開(kāi)始準(zhǔn)備一點(diǎn)點(diǎn)對(duì)大型網(wǎng)站進(jìn)行逐個(gè)登陸破解。加深自己爬蟲(chóng)水平。

環(huán)境搭建

Python 3.7.7環(huán)境,Mac電腦測(cè)試 Python內(nèi)置庫(kù) 第三方庫(kù):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’, {})) # 是否需要驗(yàn)證碼 is_need_captcha = False while True: # 需要驗(yàn)證碼 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() # 不需要驗(yàn)證碼, 登錄成功 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 # 需要識(shí)別驗(yàn)證碼 elif response_json[’code’] == -105:is_need_captcha = True # 賬號(hào)密碼錯(cuò)誤 elif response_json[’code’] == -629:raise RuntimeError(’Account -> %s, fail to login, username or password error’ % username) # 其他錯(cuò)誤 else:raise RuntimeError(response_json.get(’message’)) ’’’計(jì)算sign值’’’ def __calcSign(self, param, salt='560c52ccd288fed045859ed18bffd973'): sign = hashlib.md5(’{}{}’.format(param, salt).encode(’utf-8’)) return sign.hexdigest() ’’’初始化’’’ def __initialize(self): # 登陸請(qǐng)求頭 self.login_headers = {’Content-type’: ’application/x-www-form-urlencoded’} # 破解驗(yàn)證碼請(qǐng)求頭 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’ # 獲取驗(yàn)證碼URL self.captcha_url = ’https://passport.bilibili.com/captcha’ # 破解網(wǎng)站來(lái)自: https://github.com/Hsury/Bilibili-Toolkit # 破解驗(yàn)證碼URL self.crack_captcha_url = ’https://bili.dev:2233/captcha’ # 請(qǐng)求頭都得加這個(gè) self.session.headers.update({’User-Agent’: 'Mozilla/5.0 BiliDroid/5.51.1 (bbcallen@gmail.com)'})

移動(dòng)端登陸

移動(dòng)端與PC端類(lèi)似,網(wǎng)址URL差異以及請(qǐng)求頭差異。在此不過(guò)多介紹。 全部代碼:

’’’移動(dòng)端登錄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’, {})) # 是否需要驗(yàn)證碼 is_need_captcha = False while True: # 需要驗(yàn)證碼 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() # 不需要驗(yàn)證碼, 登錄成功 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 # 需要識(shí)別驗(yàn)證碼 elif response_json[’code’] == -105:is_need_captcha = True # 賬號(hào)密碼錯(cuò)誤 elif response_json[’code’] == -629:raise RuntimeError(’Account -> %s, fail to login, username or password error’ % username) # 其他錯(cuò)誤 else:raise RuntimeError(response_json.get(’message’)) ’’’計(jì)算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)站來(lái)自: 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爬蟲(chóng)破解登陸嗶哩嗶哩的方法的文章就介紹到這了,更多相關(guān)Python爬蟲(chóng)破解登陸內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: python
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲乱码一区| 日韩视频免费| 欧美一级网址| 91精品福利观看| 欧美天堂一区| 国产精品毛片久久久| 日韩综合一区二区| 亚洲va久久| 欧美日韩在线精品一区二区三区激情综合| 亚洲乱亚洲高清| 久久国际精品| 麻豆一区二区三| 成人在线免费观看网站| 日韩成人免费| 欧美性感美女一区二区| 伊人精品视频| 亚洲aa在线| 国产欧美三级| 国产成人精选| 亚洲福利精品| 综合亚洲视频| 青青草国产精品亚洲专区无| 国产精品调教| 在线亚洲人成| 午夜一级久久| 人人精品久久| 国产aⅴ精品一区二区三区久久| 午夜av不卡| 日韩亚洲在线| 欧美日本精品| av日韩中文| 免费日韩精品中文字幕视频在线| 日韩国产欧美在线视频| 国产在线观看91一区二区三区| 高清av不卡| 久久av在线| 国产伦理久久久久久妇女| 激情中国色综合| 亚洲成人免费| 国产亚洲人成a在线v网站| 高清一区二区三区av| 国产专区一区| 日韩二区三区四区| 国产精品久久久久蜜臀| 亚洲经典在线| 国产欧美在线| 日韩精品欧美| 日本精品国产| 成人免费网站www网站高清| 天堂av在线一区| 麻豆视频一区| 亚洲免费激情| 国产精品一区二区99| 亚洲va中文在线播放免费| 中文字幕亚洲影视| 国产精品久久久久久久久久10秀| 国产美女精品| 久久三级中文| 六月婷婷一区| 97精品国产福利一区二区三区| 亚洲综合日本| 久久久久久久欧美精品| 久久国产精品久久久久久电车| 国产日韩欧美一区| 久久九九精品| 国产亚洲电影| 最新国产拍偷乱拍精品| 国产高清亚洲| 国产亚洲永久域名| 国产一区二区三区不卡视频网站| 老鸭窝毛片一区二区三区| 成人在线视频免费看| 五月亚洲婷婷 | 欧美不卡高清一区二区三区| 欧洲av不卡| 高清一区二区三区| 国产黄色精品| 久久激情av| 日韩av在线播放中文字幕| 亚洲主播在线| 欧美精选一区二区三区| 日韩精品第一区| 日本激情一区| 成人台湾亚洲精品一区二区| 国产精品久久乐| 国产精品一区二区精品| 国产亚洲高清在线观看| 91精品视频一区二区| 亚洲精品高潮| 亚洲专区一区| 亚洲免费中文| 亚洲免费一区二区| 视频一区视频二区在线观看| 野花国产精品入口| 亚洲在线国产日韩欧美| 亚洲色诱最新| 视频一区二区三区入口| aa国产精品| 日韩影院精彩在线| 伊人久久一区| 日韩在线成人| 欧美日韩亚洲一区在线观看| 日本va欧美va精品发布| 91欧美精品| 日本aⅴ亚洲精品中文乱码| 亚洲精品黄色| 日韩av在线免费观看不卡| 国产欧美日韩一区二区三区在线| 国产视频一区二| 免费一级欧美在线观看视频 | av在线最新| 久久久久91| 91高清一区| 免费看黄色91| 日本一区二区三区视频在线看| 在线一区二区三区视频| 欧美中文高清| 麻豆精品一区二区综合av| 成人国产精品一区二区免费麻豆| 成人亚洲一区二区| 日韩精品欧美激情一区二区| 欧美性感美女一区二区| 亚洲欧美久久久| 日韩精品乱码av一区二区| 麻豆精品新av中文字幕| 日韩av一级| 免费成人av在线播放| 欧美日韩亚洲一区三区| 国产一区二区三区91| 久久国产直播| 天堂成人国产精品一区| 久久国产生活片100| 都市激情国产精品| 欧美 日韩 国产精品免费观看| 999在线观看精品免费不卡网站| 亚洲精品系列| 精品精品久久| 夜夜精品视频| 日韩av一二三| 国产激情在线播放| 中国女人久久久| 欧美精品观看| 欧美片第1页| 综合国产精品| 精品国产乱码久久久久久樱花| 快播电影网址老女人久久| 亚洲一区网站| 精品亚洲精品| 国内激情久久| 国产欧美日韩一级| 亚洲成人精品| 日韩高清不卡一区二区| 高清av不卡| 亚久久调教视频| 欧美韩日一区| 亚洲精品在线国产| 日韩一区亚洲二区| 中文字幕中文字幕精品| 97精品视频在线看| 亚洲精品成a人ⅴ香蕉片| 高清不卡一区| 亚洲精品裸体| 久久精品国产68国产精品亚洲| 日韩va亚洲va欧美va久久| 久久免费黄色| 久久精品凹凸全集| 激情综合网五月| 麻豆精品视频在线观看免费| 国产婷婷精品| 四季av一区二区凹凸精品| 蜜桃一区二区三区在线| 国产一区二区三区不卡视频网站 | 夜夜精品视频| 精品五月天堂| 最近国产精品视频| 欧美sss在线视频| 国产日韩欧美中文在线| 亚洲欧美伊人| 精品视频自拍| 亚州av一区| 波多野结衣一区| 国产一区二区三区91| 日本91福利区| 男人天堂欧美日韩| 欧美亚洲日本精品| 911亚洲精品| 99视频精品| 激情亚洲影院在线观看| 欧美国产极品| 青青在线精品| 视频一区二区不卡| 亚洲视频综合| 中文字幕人成乱码在线观看| 国产日韩一区二区三免费高清| 美日韩精品视频| 四虎884aa成人精品最新| 精品国产成人| 国产日韩欧美一区二区三区在线观看 | 日本欧美久久久久免费播放网| 亚洲精品2区|