某站js逆向之播放量刷取

 1,播放量抓包分析

1.1,播放包的捕获

1.1.1,发现少了对应的几个包

其中now的cookei的值包含这些

而h5的有,多了一个响应值,而bobo的包,只是一个响应播放的图片,就不用管。

2,分析now的cookei

2.2,多次抓包发现变换的值有这些

2.3,开始逐个分析

buvid4的获取,发现在spi请求里面有,用python获取

2.4,获取buvid3,以及b_nut

2.4.1,发现是用buvid4作为cookie发送之后拿到的响应cookei

2.5,拿取b_lsid

2.5.1,全局搜索一眼就看出来赋值位置

2.5.2,找加密就行了,额挺尬尴的就在上面

2.5.3,就不一一找位置,太简单了,简单的扣就行了,直接python改写

2.6,获取_uuid

2.6.1,全局搜索,找到生成位置,控制台输出是obj生成的,是一个自调用方法,一样的进去找生成方法就行了,很简单,直接python改写,记得存入seesion

2.7,拿取sid,在v2找到有响应头,但是他携带表单有变化值,所以,要先拿到aid。cid,的值

2.7.1,主页直接拿源码正则提取出来

2.7.2,直接发送请求获取sid

3,发送now请求,发现播放量没有涨

4,发现h5携带时间问题,对h5发起模拟请求

后续可以上线程池,和代理,实现上百万播放,自此完结撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

import requests
import re
import time
import execjs
seesion = requests.Session()
py_url = 'https://www.bilibili.com/video/BV168411B7dp/?spm_id_from=444.41.list.card_archive.click'
xxxxx = py_url.split('/')[-2]
header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35'
    }
def buvid4():
    url = 'https://api.bilibili.com/x/frontend/finger/spi'
    header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35'
        }
    resp = seesion.get(url).text
    buvid4 = re.search('"b_4":"(?P<buvid4>.+?)"}', resp).group('buvid4')
    return buvid4
buvid4 = buvid4()
seesion.cookies.set('buvid4',buvid4)

def buvid3():
    resp = seesion.get(py_url,headers=header)
    buvid3_cookie = resp.cookies
    return buvid3_cookie
resp = buvid3()
buvid3 = resp['buvid3']
b_nut = resp['b_nut']
seesion.cookies.set('buvid3',buvid3)
seesion.cookies.set('b_nut',b_nut)
def b_lisd():
    xx = str(int(time.time() * 1000))
    with open("b_lisd.js") as f:
        js_code = f.read()

    jscode = execjs.compile(js_code)
    b_lisd = jscode.call("get", xx)

    return b_lisd
b_lisd =b_lisd()
seesion.cookies.set('b_lisd',b_lisd)

def _uuid():
    with open("uuid.js") as f:
        js_cod = f.read()

    jscod = execjs.compile(js_cod)
    uuid = jscod.call("n")
    return uuid
uuid = _uuid()
seesion.cookies.set('_uuid',uuid)
def ids():
    url_cid_aid = 'https://www.bilibili.com/video/%s/'%(xxxxx)
    resp = requests.get(url=url_cid_aid, headers=header).text
    ret = re.search('"stat":\{"aid":(?P<aid>\d+),"view":(?P<view>\d+),"danmaku',resp)

    aid = ret.group("aid")

    bfl = ret.group("view")
    cidco = re.search('"dynamic":"","cid":(?P<cid>\d+),"dimension"',resp) #bvid":"BV1x84y1W7vC"
    cid = cidco.group('cid')
    bvid = re.search('"videoData":\{"bvid":"(?P<bvid>.*?)","aid"',resp)
    bvid = bvid.group('bvid')
    seesion.cookies.set('cid', cid)
    seesion.cookies.set('aid', aid)
    seesion.cookies.set('bvid', bvid)
    seesion.cookies.set('bfl', bfl)
    return cid, aid, bvid, bfl
res = ids()

def sid():
    cid, aid, bvid, bfl = ids()

    url = "https://api.bilibili.com/x/player/wbi/v2"
    sj = str(int(time.time()))
    headers = {
        "authority": "api.bilibili.com",
        "accept": "application/json, text/plain, */*",
        "accept-language": "zh-CN,zh;q=0.9",
        "cache-control": "no-cache",
        "origin": "https://www.bilibili.com",
        "pragma": "no-cache",
        "referer": "https://www.bilibili.com/video/BV1x84y1W7vC/?spm_id_from=333.337.search-card.all.click&vd_source=80ee6b726db01708ed69d633b9c295a7",
        "sec-ch-ua": "\"Chromium\";v=\"116\", \"Not)A;Brand\";v=\"24\", \"Google Chrome\";v=\"116\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\"",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-site",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
    }
    params = {
        "aid": aid,
        "cid": cid,
        "web_location": "1315873",
        "w_rid": 'dab758539068282025b1e9401a06fb02',
        "wts": sj
    }
    sid = seesion.get(url, headers=headers,params=params)
    re = sid.cookies
    return re
re = sid()
sid = re['sid']
seesion.cookies.set('sid', sid)
#剩下固定不变的cookie的整合
sj = str(int(time.time()))
seesion.cookies.set('CURRENT_FNVAL',"4048")
seesion.cookies.set('bili_ticket','eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTQzMTUyMDgsImlhdCI6MTY5NDA1NjAwOCwicGx0IjotMX0.f_DfrhMsLhBGfM9aKWYzBO7jVbgVWgFG5fJrGu8BDlA')
seesion.cookies.set('buvid_fp','a6312429b8aaf9721fbd12dc4dd94e4b')
seesion.cookies.set('bili_ticket_expires',sj)

import random
aid =res[1]
cid =res[0]
qb = res[3]
print('初始播放量', qb)
h5_url = 'https://api.bilibili.com/x/click-interface/click/web/h5'
ctime = int(time.time())
data = {
    "aid": aid,
    "cid": cid,
    "part": "1",
    "mid": "0",
    "lv": "0",
    "ftime":str(ctime - random.randint(100,500)),
    "stime": str(ctime),
    "jsonp": "jsonp",
    "type": "3",
    "sub_type": "0",
    "from_spmid": "333.999.0.0",
    "auto_continued_play": "0",
    "refer_url":"" ,
    "bsource":"" ,
    "spmid": "333.788.0.0",
}
ret = seesion.post(h5_url,headers=header,data=data).json()
print(ret)
qb = res[3]

print('h5请求后的播放',qb)
这是一个 Python 字典对象,表示了一个 Bilibili 网的 Cookie 信息。具体来说,这个 Cookie 包含了以下信息: - b_nut: 一个整数,可能是某个用户的 ID 或者一个随机数。 - buvid3: 一个字符串,可能是某个用户的 ID,其中包含了一些字母和数字。 - buvid_fp: 一个字符串,可能是某个用户的 ID,其中包含了一些字母和数字。 - i-wanna-go-back: 一个整数,可能表示某个用户是否想要返回上一页。 - DedeUserID: 一个整数,可能是某个用户的 ID。 - DedeUserID__ckMd5: 一个字符串,可能是某个用户的 ID 的 MD5 值。 - b_ut: 一个整数,可能表示某个用户是否已经登录。 - nostalgia_conf: 一个整数,可能表示某个用户是否开启了旧版播放器。 - rpdid: 一个字符串,可能是某个用户的 ID,其中包含了一些特殊字符。 - hit-new-style-dyn: 一个整数,可能表示某个用户是否开启了新版播放器。 - hit-dyn-v2: 一个整数,可能表示某个用户是否开启了新版播放器。 - is-2022-channel: 一个整数,可能表示某个用户是否正在使用 2022 版本的频道页面。 - CURRENT_BLACKGAP: 一个整数,可能表示某个用户当前的黑屏状态。 - buvid4: 一个字符串,可能是某个用户的 ID,其中包含了一些特殊字符。 - fingerprint: 一个字符串,可能表示某个用户的浏览器指纹。 - header_theme_version: 一个字符串,可能表示某个用户当前的主题版本。 - home_feed_column: 一个整数,可能表示某个用户当前的主页显示列数。 - PVID: 一个整数,可能表示某个用户的页面 ID。 - CURRENT_FNVAL: 一个整数,可能表示某个用户当前的视频清晰度。 - CURRENT_QUALITY: 一个整数,可能表示某个用户当前的视频清晰度。 - share_source_origin: 一个字符串,可能表示某个用户当前的视频分享来源。 - bsource: 一个字符串,可能表示某个用户当前的视频分享来源。 - b_lsid: 一个字符串,可能表示某个用户当前的视频分享 ID。 - _uuid: 一个字符串,可能是某个用户的 UUID。 - SESSDATA: 一个字符串,可能是某个用户的登录状态信息。 - bili_jct: 一个字符串,可能是某个用户的登录状态信息。 - sid: 一个字符串,可能是某个用户的登录状态信息。 这些 Cookie 包含了用户的身份认证信息、浏览器偏好设置、网使用记录等信息,可以被用于进行网络请求时携带这些信息,以便进行身份认证或其他需要的操作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值