本帖最后由 Ishin 于 2021-11-8 15:47 编辑
目的
本来我是想做一个每天自动推送提醒新番更新+新番视频地址的云函数。但是在研究动漫视频网站的时候,一直困于爬取重定向后的地址。
爬取网站
网站:https://www.agefans.vip/
以喜欢的 《迦希大人不会气馁~》 https://www.agefans.vip/play/20210205?playid=2_13 为例子
步骤一
抓包:
发现在网站抓包视频API的时候会被反调试,调试会一直自动断下,继续执行会返回主页。Source里面写着 debugger。
解决方法
- 可以停用断点
deactivate breakpoints
- 也可以,在代码行号位置
右键 ,添加条件断点conditional breakpoint , 写入false 即可。
- 又或者,右键代码行,选择
Never pause here 。
步骤二
研究如何获得视频地址的API。
抓包获取直接可观看的视频地址,例如: https://kol-fans.fp.ps.netease.com/file/61803ebb96dee42611db2b10S4iP7uY403
问题是:
如何获取任何番的视频地址。比如,本例中的61803ebb96dee42611db2b10S4iP7uY403 这段文件名是如何得到的?
步骤三
找获得视频文件名的算法API
研究发现,在加载网页过程中,还有另外一个API,用于获取视频的名称。如:https://play.agefans.vip:8443/_getplay2?kp=......
然而,更大的问题来了:
这段更长的参数是哪里来的?
kp=ZupmAWoVoLSgMfuPPda%2BD%2FxZx11xUjAm4V%2F9Vau9ad1Xrxmvdw5zah1T0YQIXlhLYYbNvyb3IisWvLaAUV8g27R6Zdo9kx%2BYiAJOZrXDtH45SnA4ToISuu2H3a23CczQ4MsoSWO7xUypj6ViUfGXBe%2Ff338dSkTcQTIaAmSiz8P2d0AKU4UH3Q%3D%3D
我完全不知道kp 参数是如何来的?
步骤四
跟着网页走它自身获取参数的流程。
- 点击
Initiator 跟踪网站的发起源。
- 发现该API是由网页
https://www.agefans.vip/_getplay?aid=20210205&playindex=2&epindex=13&r=0.45431278811630227 发起。
- 在请求该网站的时候,该网站会自动重定向视频真正地址的
url (即上图的location )给我们。
但是
- 在我使用python模拟操作过程中,明明应该是
302 的status_code ,却一直返回200 。
- 我已经设置了
headers 和 cookies ,
- 还有
allow_redirects=False 。
- 然而
response.headers 返回的字典里面也根本没有key为"location"的元素。
response.history 的历史也是为空的列表。
源代码如下:
import requests
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36",
"referer": "https://www.agefans.vip/play/20210327?playid=2_6",
"cookie": "ck_volume=0.45; fa_c=1; Hm_lvt_7fdef555dc32f7d31fadd14999021b7b=1636294078,1636306288,1636309542,1636344668; Hm_lpvt_7fdef555dc32f7d31fadd14999021b7b=1636344998; t1=1636345118306; k1=2409811800; k2=267297131104384; t2=1636345058431; fa_t=1636345058458",
}
url = "https://www.agefans.vip/_getplay?aid=20210327&playindex=2&epindex=6&r=0.5524324470363888"
r = session.get(url,headers=headers,stream=True,allow_redirects=False)
print(r.status_code)
print(r.headers)
求助
- 重定向后网址,如https://play.agefans.vip:8443/_getplay2?kp=ZupmAWoVoLSgMfuPPda%2BD%2FxZx11xUjAm4V%2F9Vau9ad1Xrxmvdw5zah1T0YQIXlhLYYbNvyb3IisWvLaAUV8g27R6Zdo9kx%2BYiAJOZrXDtH45SnA4ToISuu2H3a23CczQ4MsoSWO7xUypj6ViUfGXBe%2Ff338dSkTcQTIaAmSiz8P2d0AKU4UH3Q%3D%3D 里面的
kp 参数是如何得到的?
- 为什么requiests访问本应该重定向302的XHR,却返回
status_code 200 。
- 为什么会没有.headers["location"]。。
- 任何形式的帮助,我都感激不尽,因为我已经思考了整整两天,搜索了各种资料,还是不知道为何。谢谢各位。
|