Python批量爬取B站法外狂徒张三所有视频【含jS逆向解密】

传说中,有人因为只是远远的看了一眼法外狂徒张三就进去了😂

我现在是获取他视频,岂不是直接终生了🤩

网友:赶紧跑路吧 😏

好了话不多说,我们直接开始今天的内容吧!

你需要准备

环境使用

  • Python 3.8
  • Pycharm

模块使用

  • import requests
  • import csv
  • import datetime
  • import hashlib
  • import time

爬虫实现基本流程

一、数据来源分析

  1. 明确需求
    - 明确采集网站以及数据
    网址: https://space.bilibili.ubdate
    数据: 视频基本信息: 标题 播放量 评论 弹幕 上传时间 …
  2. 抓包分析
    - 打开开发者工具: 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

二. 代码实现步骤 <固定四个大步骤>

  1. 发送请求, 模拟浏览器对于url地址发送请求
    请求链接: 数据包链接
  2. 获取数据, 获取服务器返回响应数据
    开发者工具: response
  3. 解析数据, 提取我们需要的数据内容
    视频基本信息
  4. 保存数据, 把信息数据保存表格文件

代码展示

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)

 

好了,今天的分享就到这里结束了,咱们下次见

热门相关:亿万盛宠只为你   本法官萌萌哒   未来兽世:买来的媳妇,不生崽   拒嫁豪门,前妻太抢手   后福