电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

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

寫在前面

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

環境搭建

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).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’ # 破解網站來自: 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).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’ # 破解網站來自: 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爬蟲破解登陸嗶哩嗶哩的方法的文章就介紹到這了,更多相關Python爬蟲破解登陸內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: python
相關文章:
主站蜘蛛池模板: 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 科客,主见不成见| 伺服电机_直流伺服_交流伺服_DD马达_拓达官方网站 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 送料机_高速冲床送料机_NC伺服滚轮送料机厂家-东莞市久谐自动化设备有限公司 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 考试试题_试卷及答案_诗词单词成语 - 优易学 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 游动电流仪-流通式浊度分析仪-杰普仪器(上海)有限公司 | 点胶机_点胶阀_自动点胶机_智能点胶机_喷胶机_点胶机厂家【欧力克斯】 | 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 警用|治安|保安|不锈钢岗亭-售货亭价格-垃圾分类亭-移动厕所厂家-苏州灿宇建材 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 深圳VI设计-画册设计-LOGO设计-包装设计-品牌策划公司-[智睿画册设计公司] | 选矿设备,选矿生产线,选矿工艺,选矿技术-昆明昆重矿山机械 | 卷筒电缆-拖链电缆-特种柔性扁平电缆定制厂家「上海缆胜」 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 定量包装机,颗粒定量包装机,粉剂定量包装机,背封颗粒包装机,定量灌装机-上海铸衡电子科技有限公司 | 包装机_厂家_价格-山东包装机有限公司 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 贝壳粉涂料-内墙腻子-外墙腻子-山东巨野七彩贝壳漆业中心 | 单柱拉力机-橡胶冲片机-哑铃裁刀-江都轩宇试验机械厂 | 防爆电机-高压防爆电机-ybx4电动机厂家-河南省南洋防爆电机有限公司 | 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 全自动固相萃取仪_高通量真空平行浓缩仪-勤业永为 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 |