Continuación del tutorial introductorio del rastreador de Python, video de la estación intermedia de CA de rastreo del rastreador de Python

¡Acostúmbrate a escribir juntos! Este es el día 12 de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de abril", haga clic para ver los detalles del evento .

escribir delante

En el blog anterior, analizamos el método de transmisión de video de la estación B con una cantidad de espacio relativamente grande. En este blog, completaremos el pozo que quedó antes y escribiremos la parte del código.

Fuente del artículo: Dream Eraser, de hecho, esta identificación es una combinación

Los pasos y la lógica del análisis no se repetirán aquí para que todos los demuestren. Puede leer el artículo anterior, que tiene instrucciones claras.

recordar primero

30280.m4s, correspondiente al archivo de audio 30064.m4s, correspondiente al archivo de video

tiempo de codificación

Aunque se analizó el video de la estación B, la codificación real aún es difícil, así que espere, hagámoslo juntos.

El enlace utilizado en todo el artículo es: www.bilibili.com/video/BV1Pv… , enlace BV, después de la actualización de la estación B, la conexión AV se actualiza a BV y la tecnología anti-escalada se multiplica.

Después de rastrear y analizar a través de Fiddler, obtuvimos algunas conclusiones como esta. El punto clave es como se muestra en la siguiente figura. El código de estado de retorno de la página es 206, al que se debe prestar atención.

Tutorial introductorio del rastreador de Python 71-100 Continuación del artículo anterior, video de la estación B de rastreo del rastreador de Python

La imagen de arriba, puede estar mareado, no se preocupe, haga clic en un enlace, necesitamos ver cómo solicita y devuelve datos. Después del análisis, encontrará un fenómeno extraño, en el caso del mismo enlace, la solicitud devuelve un código de estado 200, el otro es 206.

Tutorial introductorio del rastreador de Python 71-100 Continuación del artículo anterior, video de la estación B de rastreo del rastreador de Python

Estas dos solicitudes, una al lado de la otra, tienen la misma dirección de solicitud, pero los códigos de estado devueltos son diferentes. Esto no es lo más importante. Si observa el método de solicitud, encontrará que aparecen aún más puntos extraños.

Tutorial introductorio del rastreador de Python 71-100 Continuación del artículo anterior, video de la estación B de rastreo del rastreador de Python

El código de estado es 200, el método de solicitud es OPTIONS... Otro código de estado es 206, el método de solicitud es GET, es un poco interesante, tal vez este sea nuestro punto de avance final, primero comprenda el método de solicitud a fondo y luego podemos ir con el código se levanta.

这部分代码,我使用的链接是直接从 fiddler 中获取的,代码完毕之后,这个地方有个非常大的难度需要攻克,可以作为大家深入分析后续的一个亮点功能点。后面我们会基于这个链接做一些扩展讨论和探索。 从 fiddler 中复制的链接 https://9lglsr2.yfcalc.com:9940********=1 节省了一些篇幅,链接自己去找哦~

最终实现的代码如下,注意这个地方要通过 requests.session() 去发起请求,因为请求头中有 keep-alive 这个属性值,下述代码中删掉了部分链接,需要代码的可以关注我微信公号,回复 B 站,或者直接在文章头部下载文件也可以。

微信搜索“非本科程序员” 即可

import requests

"""
Host: 9lglsr2.yfcalc.com:9940
Connection: keep-alive
Origin: https://www.bilibili.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; UA删掉部分
range: bytes=998857-1198790
Accept: */*
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Referer: https://www.bilibili.com/video/BV1Pv41167FE
Accept-Encoding: identity
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8

"""
# 你的地址和我的不同
url = "https://9lglsr2.yfcalc.com:9940/upos-dash-mirrorks3u.bilivideo.com/bilibilidash_篇幅关系,链接删掉部分"

header_options = {

    'Host': '9lglsr2.yfcalc.com:9940',
    'Connection': 'keep-alive',
    'Access-Control-Request-Method': 'GET',
    'Origin': 'https://www.bilibili.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) UA删掉部分',
    'Access-Control-Request-Headers': 'range',
    'Accept': '*/*',
    'Sec-Fetch-Site': 'cross-site',
    'Sec-Fetch-Mode': 'cors',
    'Referer': 'https://www.bilibili.com/video/BV1Pv41167FE',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en,zh-CN;q=0.9,zh;q=0.8'

}

# 拼凑一个请求头,你获取的跟我应该大不相同,写自己的即可
headers ={
    'Host': '9lglsr2.yfcalc.com:9940',
    'Connection': 'keep-alive',
    'Origin': 'https://www.bilibili.com',
    'User-Agent': 'Mozilla/5.0 UA删掉部分',
    'range': 'bytes=0-9999999999',
    'Accept': '*/*',
    'Sec-Fetch-Site': 'cross-site',
    'Sec-Fetch-Mode': 'cors',
    'Referer': 'https://www.bilibili.com/video/BV1Pv41167FE',
    'Accept-Encoding': 'identity',
    'Accept-Language': 'en,zh-CN;q=0.9,zh;q=0.8'
}
session=requests.session()
session.options(url=url,headers=header_options,verify=False)
res=session.get(url=url,headers=headers,verify=False)
with open('audio.mp3','wb') as fp:
    fp.write(res.content)
    fp.flush()
    fp.close()
print("下载成功")
复制代码

运行成功,下载的是音频文件。

Tutorial introductorio del rastreador de Python 71-100 Continuación del artículo anterior, video de la estación B de rastreo del rastreador de Python

用同样的办法,你可以把视频下载下来,只需要获取到视频的地址即可进行操作,我得到的地址如下

url = "9ns2tr2.yfcalc.com:13357/upos-dash-m…"

爬取的音频和视频是分离的,只需要用 ffmpeg 去合并一下即可。基本逻辑已经理清楚,剩下的是修改、完善,大部头的工作即将开始,当然我这块砖已经抛给你了,剩下的由你来完成。

编码未完成部分

上面的代码只是非常小的一部分逻辑,例如在下载视频的时候,没有进度条会导致视频不确定是否下载完毕,体验非常差,如果去完成一个项目,你需要补充下,学习阶段看自己的情况。

最大的问题是我们上述的请求地址是直接从 Fiddler 中获取的,这个地址到底是怎么来的,我尝试去解决,结果发现 B 站反爬果然还是比较厉害的,我展示一下大概的进展,并没有完成该问题。

写代码的时候,如果从网页源码去获取连接,发现获取难度很大,我们在网页源码中获取的链接和视频请求的链接明显不一致

源码获取的链接(网站右键,查看源码获取到的)

http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/20/11/199591120/199591120-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1591936610&gen=playurl&os=hwbv&oi=3056817678&trid=ba124908cc9b4c08b338898c507f1b2cu&platform=pc&upsig=69afcb746d8f70b3ef157b0d5d96105a&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=39801623&orderid=0,2&logo=80000000

视频请求的真实链接

https://k31k9q1.yfcalc.com:15172/upos-dash-mirrorks3u.bilivideo.com/bilibilidash_98e9c0435499a2edc99cda183af9647c2c76fee9/199591120-1-30064.m4s?scuid=F6we2NvTZYGLpLeGVVZi&timeout=1592535041&check=1258368323&sttype=90&yfdspt=1591930241786&yfpri=100&yfopt=17&yfskip=1&yfreqid=CDkypiFjBDuLtgbAAQ&yftt=100&yfhost=5p8vjn1.yfcache.com&yfpm=1

这就需要我们破掉这个障碍了,难度最大的地方是需要找到视频请求的连接是如何拼接出来的。来吧,继续探案吧。

Continúe tratando de encontrar el enlace que se muestra en la figura a continuación, este debería ser el punto de avance, porque encontré la 真实链接dirección . Y devuelve una cadena JSON.

Python爬虫入门教程 71-100 续上篇,python爬虫爬取B站视频

Python爬虫入门教程 71-100 续上篇,python爬虫爬取B站视频

Use la herramienta de decodificación de URL para decodificar la URL utilizada para los parámetros, wow, la sensación de deja vu se acerca cada vez más a la verdad.

https://upos-dash-mirrorks3u.bilivideo.com/upgcxcode/20/11/199591120/199591120-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1591938786&gen=playurl&os=hwbv&oi=3056817678&trid=8106da0eee9548cb8377565645dbc1f8u&platform=pc&upsig=adeb773cf597120141a94bd78a8775ab&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=39801623&orderid=0,2&logo=80000000&[email protected]

El problema ahora es desbloquear las reglas de cifrado de la estación B. Con respecto a esta parte, traté de desbloquearla y descubrí que la confusión es grave y el análisis lleva mucho tiempo. El siguiente es el progreso de mi parte. El núcleo parte del código ha sido encontrado. Si es posible, descomprima y busque el código correspondiente en el archivo JS, y luego use Python para transformarlo. Encontré dos videos en la estación B, y encontré los siguientes fragmentos de código para estos dos videos, y encontré que algunos de los contenidos están encriptados, pero 混淆的字符串son consistentes. Es la parte t y la parte ak debajo

Python爬虫入门教程 71-100 续上篇,python爬虫爬取B站视频

Python爬虫入门教程 71-100 续上篇,python爬虫爬取B站视频

Luego, me metí en un cuello de botella. El método de encriptación de esta pieza no es fácil de revertir, y se puede decir que lleva mucho tiempo intentarlo (soy perezoso otra vez, no seguí pensando ~ Jajaja ), si lo resuelves, ¡asegúrate de enviarme un mensaje y avísame! ! !

hora del huevo

Para la descarga de videos desde la estación B, es muy fragante usar lo que obtienes. Reconstruir la rueda depende de la habilidad que estés ejercitando. Sin embargo, en este caso, visito directamente el sitio web móvil y la dirección de acceso se cambia a https://m.bilibili.com/video/BV1Pv41167FEDirecto Ver código fuente

在这里插入图片描述

emmm... Directamente un archivo MP4, más fragante, más simple, más conveniente para escribir código, obtener conexión, extraer direcciones, descargar binarios, escribir archivos, archivar, salir, un conjunto de golpes combinados, tomar datos y salir.

Muchas veces, no podemos resolver problemas técnicos, no porque nuestra tecnología no sea buena, sino porque no sabemos cómo hacerlo.

Supongo que te gusta

Origin juejin.im/post/7085545132644106276
Recomendado
Clasificación