Python采集B站法外狂徒张三所有视频【含jS逆向解密】

Python采集B站法外狂徒张三所有视频【含jS逆向解密】
最新回答
尛臉狠謎人,

2022-07-23 17:33:00

Python采集B站法外狂徒张三所有视频(含JS逆向解密)

一、环境与模块准备1. 环境使用
  • Python 3.8
  • PyCharm(或其他IDE)
2. 模块使用
  • requests:用于发送HTTP请求。
  • csv:用于将数据保存为CSV格式。
  • datetime:用于处理时间戳。
  • hashlib:用于生成MD5哈希值,用于B站API的签名。
  • time:用于获取当前时间戳。
二、爬虫实现基本流程1. 数据来源分析
  • 明确需求:采集B站UP主“法外狂徒张三”(mid=517327498)的所有视频信息,包括标题、播放量、评论、弹幕、上传时间等。
  • 抓包分析

    打开浏览器开发者工具(F12)。

    在“Network”选项卡中筛选XHR请求。

    找到视频列表API请求,如:

    https://api.bilibili.com/x/space/wbi/arc/search?mid=517327498&ps=30&tid=0&pn=1&keyword=&order=pubdate&platform=web&web_location=1550101&order_avoided=true&w_rid=c9a9f931486961175b1e8138d695680e&wts=1690027894

    注意参数w_rid和wts,其中w_rid是MD5签名,wts是当前时间戳。

2. 代码实现步骤
  1. 发送请求:模拟浏览器访问API链接。
  2. 获取数据:从响应中提取JSON数据。
  3. 解析数据:提取视频标题、播放量、评论等字段。
  4. 保存数据:将数据写入CSV文件。
三、代码实现import timeimport requestsimport csvimport datetimeimport hashlib# 初始化CSV文件f = open('法外狂徒张三视频信息.csv', mode='w', encoding='utf-8', newline='')csv_writer = csv.DictWriter(f, fieldnames=[ '标题', '描述', 'BV号', '播放量', '弹幕', '评论', '时长', '上传时间'])csv_writer.writeheader()# 请求头,模拟浏览器headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}# 循环获取多页数据for page in range(1, 11): # 假设获取前10页 # 构造签名参数 string = f'keyword=&mid=517327498&order=pubdate&order_avoided=true&platform=web&pn={page}&ps=30&tid=0&web_location=1550101&wts={int(time.time())}' md5_hash = hashlib.md5(string.encode('utf-8')).hexdigest() # API请求参数 params = { 'mid': '517327498', 'ps': '30', 'tid': '0', 'pn': page, 'keyword': '', 'order': 'pubdate', 'platform': 'web', 'web_location': '1550101', 'order_avoided': 'true', 'w_rid': md5_hash, 'wts': int(time.time()) } # 发送请求 url = '
https://api.bilibili.com/x/space/wbi/arc/search'
response = requests.get(url, params=params, headers=headers) data = response.json() # 解析数据 for video in data['data']['list']['vlist']: # 转换时间戳为日期 upload_time = datetime.datetime.fromtimestamp(video['created']).strftime('%Y-%m-%d') video_info = { '标题': video['title'], '描述': video['description'], 'BV号': video['bvid'], '播放量': video['play'], '弹幕': video['video_review'], '评论': video['comment'], '时长': video['length'], '上传时间': upload_time } csv_writer.writerow(video_info) print(video_info)f.close()四、关键点说明
  1. 签名生成

    B站API需要w_rid(MD5签名)和wts(时间戳)。

    签名规则:将参数按固定顺序拼接成字符串,计算MD5值。

  2. 分页处理

    通过pn参数控制页码,循环获取多页数据。

  3. 数据解析

    响应数据为JSON格式,通过data['data']['list']['vlist']提取视频列表。

  4. 时间处理

    使用datetime模块将时间戳转换为可读日期。

五、注意事项
  1. 反爬机制

    B站可能对频繁请求进行限制,建议添加延迟(如time.sleep(1))。

    如遇403错误,可能需要更新User-Agent或使用代理IP。

  2. 合法性

    爬取数据需遵守B站robots.txt协议,避免高频请求影响服务器。

  3. 数据存储

    CSV文件默认保存在脚本同目录下,可修改路径。

六、扩展功能
  1. 下载视频

    可通过视频BV号调用you-get或yt-dlp工具下载。

  2. 增量更新

    记录上次爬取时间,仅获取新发布视频。

  3. 异常处理

    添加try-except块捕获网络请求或解析错误。

通过以上代码和说明,你可以完整采集“法外狂徒张三”的所有视频信息。如需进一步优化或扩展功能,可结合实际需求调整代码。