当前位置:首页 > 新鲜科技 > 正文内容

92行代码使用二维码获取哔哩哔哩登录cookies

小宝4年前 (2020-06-22)新鲜科技1442

各位想要爬取B站的小伙伴最头疼的应该就是怎么登录了,一位MRArchive的b站up主就来展示了一下怎么用python实现使用二维码登录哔哩哔哩。

代码如下:

import json
import os
import qrcode
import requests
from concurrent.futures import ThreadPoolExecutor
import time
import cv2 as cv


class Login:
    def __init__(self):
        self.oauthKey = ''
        self.qrcodeUrl = ''
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0',
            'Accept': 'application/json, text/plain, */*',
            'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
            'Accept-Encoding': 'gzip, deflate, br',
            'Referer': 'https://passport.bilibili.com/',
            'Origin': 'https://passport.bilibili.com',
            'Connection': 'keep-alive'
        }
        self.session = requests.Session()
        self.session.headers.update(
            {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0'})

    def _requests(self, method, url, decode_level=2, retry=10, timeout=15, **kwargs):
        if method in ["get", "post"]:
            for _ in range(retry + 1):
                try:
                    response = getattr(self.session, method)(url, timeout=timeout, **kwargs)
                    return response.json() if decode_level == 2 else response.content if decode_level == 1 else response
                except:
                    pass
        return None

    def getQRCode(self):
        req = self._requests('get', "https://passport.bilibili.com/qrcode/getLoginUrl")
        if req and req.get('code') == 0:
            self.oauthKey = req['data']['oauthKey']
            self.qrcodeUrl = req['data']['url']
            return True
        return False

    @staticmethod
    def showQRCode(url):
        try:
            cv.destroyAllWindows()
        except:
            pass
        qrCode = qrcode.QRCode()
        qrCode.add_data(url)
        qrCode = qrCode.make_image()
        qrCode.save("qrCode.png")
        img = cv.imread("qrCode.png", 1)
        cv.imshow("Login", img)
        cv.waitKey()

    def login(self):
        pool = ThreadPoolExecutor(max_workers=2)
        if self.getQRCode():
            pool.submit(self.showQRCode, self.qrcodeUrl)
            while True:
                time.sleep(1)
                data = {
                    'oauthKey': self.oauthKey,
                    'gourl': "https://passport.bilibili.com/account/security"
                }
                req = self._requests('post', "https://passport.bilibili.com/qrcode/getLoginInfo", data=data)
                if req['data'] == -4:  # 未扫码
                    pass
                elif req['data'] == -2:  # 二维码过期,需要重新生成
                    self.getQRCode()
                    pool.submit(self.showQRCode, self.qrcodeUrl)
                elif req['data'] == -5:  # 已经扫码,等待确认
                    pass
                else:
                    break
            cookiesRaw = req['data']['url'].split('?')[1].split('&')
            cookies = {}
            for cookie in cookiesRaw:
                key, value = cookie.split('=')
                if key != "gourl" and key != "Expires":
                    cookies[key] = value
            print(json.dumps(cookies))
            os._exit(0)


if __name__ == '__main__':
    a = Login()
    a.login()


详细视频与已打包源码:


详细介绍视频

https://b23.tv/DUkGov

软件下载

(不建议下载编译好的软件 --太大了,建议使用源码)

蓝奏云:https://lanzous.com/id4k21a


扫描二维码推送至手机访问。

版权声明:本文由 菠萝博客 发布,如需转载请注明出处。

本文链接:https://boluobk.cn/post/105.html

标签: 源码cookies
分享给朋友:

相关文章

再度封城!紧急建方舱!疫情出现反扑迹象...千万警惕!

再度封城!紧急建方舱!疫情出现反扑迹象...千万警惕!

最近全球疫情持续恶化, 截止4月17日,已有210万人确诊。海外疫情对我国的影响也是越来越严重,随着输入型病例不断增加。令人担忧的事情还是发生了,国内疫情已经出现反扑迹象。4月2日,哈尔滨出现聚集性感染。他直接感染了两家医院的医护与病...

开1年超级会员秒变QQ靓号

开1年超级会员秒变QQ靓号

仅限5~9位数QQ才可以有资格只需在本页面支付1年QQ超级会员,即可升级靓号图标截止日期:2020.4.17~2020.5.31活动地址:https://m.vip.qq.com/clubact/2019/lightliang/index2...

区块链到底是什么?

何为区块链?我将用几个简单的例子给大家理清楚区块链这个概念到底是什么意思。说起区块链,也是在前段时间刚刚了解到的,当时觉得比较震惊,这是一个迅猛的发展趋势,随着比特币和其它一些虚拟货币的盛行,更是掀起了区块链的热潮,下面我会将自己对于区块链...

免费作品著作权,软件作品著作权登记

免费作品著作权,软件作品著作权登记

免费作品著作权,软件作品著作权登记 网上卖300元认证费的版权登记作品类别 : 文字作品 口述作品 音乐作品 戏剧作品 曲艺作品 舞蹈作品 杂技艺术作品 美术作品 建筑作品 摄影作品 电影作品 图形作品 模型作品 其他作品颁发《作品登记证书...

Linux 的 18 个装 B 命令,不看会后悔(水一波)

Linux 的 18 个装 B 命令,不看会后悔(水一波)

实在不知道发什么了,今天就水一波吧~~~1、sl 命令你会看到一辆火车从屏幕右边开往左边……安装$ sudo apt-get in­stall sl运行$ sl命令有 -a l F e 几个选项,-a An ac­ci­dent seems...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。