Python批量爬取B站法外狂徒张三所有视频【含jS逆向解密】
传说中,有人因为只是远远的看了一眼法外狂徒张三就进去了😂
我现在是获取他视频,岂不是直接终生了🤩
网友:赶紧跑路吧 😏
好了话不多说,我们直接开始今天的内容吧!
环境使用
- Python 3.8
- Pycharm
模块使用
- import requests
- import csv
- import datetime
- import hashlib
- import time
爬虫实现基本流程
一、数据来源分析
- 明确需求
- 明确采集网站以及数据
网址: https://space.bilibili.ubdate
数据: 视频基本信息: 标题 播放量 评论 弹幕 上传时间 … - 抓包分析
- 打开开发者工具: F12 / 右键点击检查选择network
- 点击网页下一页 --> XHR 第一条数据包就是我们需要的内容
数据包: https://api.bilibili.com/x/space/wbi/arc/search?mid=517327498&ps=30&tid=0&pn=3&keyword=&order=pubdate&platform=web&web_location=1550101&order_avoided=true&w_rid=c9a9f931486961175b1e8138d695680e&wts=1690027894
二. 代码实现步骤 <固定四个大步骤>
- 发送请求, 模拟浏览器对于url地址发送请求
请求链接: 数据包链接 - 获取数据, 获取服务器返回响应数据
开发者工具: response - 解析数据, 提取我们需要的数据内容
视频基本信息 - 保存数据, 把信息数据保存表格文件
import time # 导入数据请求模块 第三方模块 需要安装 import requests # 导入格式化输出模块 from pprint import pprint import datetime # 导入csv模块 import csv import hashlib # 文章不理解,我还录制了详细视频 # 都放在这个q裙了:708525271 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): 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())}6eff17696695c344b67618ac7b114f92' # 实例化对象 md5_hash = hashlib.md5() md5_hash.update(string.encode('utf-8')) # 请求链接 url = 'https://api.bilibili.com/x/space/wbi/arc/search' # 请求参数 data = { 'mid': '517327498', 'ps': '30', 'tid': '0', 'pn': page, 'keyword': '', 'order': 'pubdate', 'platform': 'web', 'web_location': '1550101', 'order_avoided': 'true', 'w_rid': md5_hash.hexdigest(), 'wts': int(time.time()), } # 发送请求 <Response [200]> 响应对象 表示请求成功 response = requests.get(url=url, params=data, headers=headers) for index in response.json()['data']['list']['vlist']: # 时间戳 时间节点 --> 上传视频时间点 date = index['created'] dt = datetime.datetime.fromtimestamp(date) dt_time = dt.strftime('%Y-%m-%d') dit = { '标题': index['title'], '描述': index['description'], 'BV号': index['bvid'], '播放量': index['play'], '弹幕': index['video_review'], '评论': index['comment'], '时长': index['length'], '上传时间': dt_time, } # 写入数据 csv_writer.writerow(dit) print(dit)
好了,今天的分享就到这里结束了,咱们下次见