写在前面

在使用和分享此爬虫代码时,请务必遵守以下限制和建议,并减少对目标服务器的负担:

  1. 遵循网站规定: 请始终遵循被爬取网站的使用条款、隐私政策以及robots.txt文件中的规定。不得违反网站规定的任何规则。

  2. 合法用途: 此爬虫代码仅用于合法、合理的用途,如数据收集、分析或学术研究等。不得将其用于非法用途,包括但不限于侵犯隐私、版权或其他法律权益。

  3. 适度请求频率: 设置合理的请求频率,避免对目标服务器造成过度负担。频繁的请求可能导致被封禁或其他限制。

  4. 尊重隐私: 不得通过爬虫获取或传播任何用户敏感信息。请尊重被爬取网站和用户的隐私权。

  5. 不要滥用资源: 避免滥用带宽和其他资源。在下载大量数据时,谨慎使用服务器资源,以确保公平共享和减少不必要的开销。

  6. 不要绕过登录限制: 不得通过绕过网站的登录限制或其他访问控制机制,以确保不违反网站的安全策略。

请注意,违反这些限制可能会导致法律责任,打击作者的热情,对爬虫作者和使用者都会产生负面影响。在使用和分享爬虫代码时,请谨慎考虑其合法性和合规性,以维护互联网的健康和稳定。

使用说明

  1. 有一定的python基础。
  2. 知道如何获取自己的Cookie
  3. 已经安装了相关库,配置好了相关环境

拜年祭api

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

import json
from RequestUrl import get_url
import execjs
import re

def get_information(url):
respon = get_url(url)
information = re.findall(r'<script>window.__INITIAL_STATE__=(.*?)</script>', respon.text, re.S)[0]
if information == '':
print('拜年祭网址解析失败')
return 0

information = re.sub(r';\(.*\);', '', information)
information = json.loads(information)

avid = information['videoInfo']['aid']
bvid = information['videoInfo']['bvid']
cid = information['videoInfo']['cid']
compile_code = execjs.compile(open('w_rid.js', 'r', encoding='utf-8').read())
wts = compile_code.call('wts')
key = f'avid={avid}&bvid={bvid}&cid={cid}&fnval=4048&fnver=0&fourk=1&from_client=BROWSER&gaia_source=&qn=80&session=&voice_balance=1&web_location=1315873&wts=' + wts
w_rid = compile_code.call('w_rid',key)

api = f'https://api.bilibili.com/x/player/wbi/playurl?avid={avid}&bvid={bvid}&cid={cid}&qn=80&fnver=0&fnval=4048&fourk=1&gaia_source=&from_client=BROWSER&session=&voice_balance=1&web_location=1315873&w_rid={w_rid}&wts={wts}'
return api

其实这个apiw_rid的加密是和session有关的,但是这个参数在我多次实验中发现,可有可无。b站动漫的下载也是这个逻辑,就是加密的key值不一样session这个参数的获取还是有点难度的