python 处理B站视频数据,数据存本地

绪论

上一个已经通过B站的API,来实现了对数据的读取,这篇文章就是,将数据存储在本地的TXT文件中
上一篇文章的连接:
链接: 使用python中的requests模块来实现B站视频数据的抓取

实现

实现大概分为三个步骤

  1. 打开文件,遍历,获得视频的dvid
  2. 根据读取到的ID,调用上一篇文章,获取视频数据
  3. 获取到数据后,将数据添加到文档

PS :数据的格式:时间,ID,标题,数字。。。描述

1 导入头文件

import requests
import json
import re
import os

2. 获得数据的函数

def getData(base_url):
    header={
   'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
    r = requests.get(base_url,headers=header )#获取网页的信息

    _json_data = json.loads(r.text)#将数据进行格式转换,这样方便处理

    '''
    下面就是各个参数的获取,也可以根据自己的实际情况进行数据的获取
    '''
    bvid = _json_data.get('data').get('bvid')#视频的编号
    title = _json_data.get('data'
### 如何使用 Python 编写爬虫抓取 B 视频数据 #### 准备工作 为了实现这一目标,需要安装一些必要的库。这些库可以帮助处理 HTTP 请求、解析 JSON 数据以及管理异步操作。 ```bash pip install requests aiohttp bilibili-api-python ``` #### 抓取视频基本信息 通过调用 `bilibili-api` 库中的接口方法可以直接获取到指定 AV/BV 号的视频详情: ```python from bilibili_api import video as bvid_video, sync def fetch_basic_info(bv_id): v = bvid_video.Video(bvid=bv_id) info_dict = sync(v.get_info()) title = info_dict['title'] pub_date = info_dict['pubdate'] # 时间戳形式返回发布时间 return { "标题": title, "发布时间": pub_date } ``` 此部分代码利用了第三方封装好的 API 接口来简化请求过程[^1]。 #### 获取弹幕列表 针对每一条视频记录其对应的 XML 格式的弹幕文件链接,并下载保存本地;接着读取该文件提取其中的有效字段完成进一步的数据挖掘任务。 ```python import xml.etree.ElementTree as ET from datetime import datetime async def download_danmaku(video_bvid, output_file='danmakus.xml'): vid = bvid_video.Video(bvid=video_bvid) danmu_url = await vid.get_dm_xml() async with aiohttp.ClientSession() as session: resp = await session.get(danmu_url[0]) content = await resp.text() with open(output_file, 'w', encoding='utf8') as f: f.write(content) # 解析XML格式的弹幕文档 def parse_danmaku(file_path): tree = ET.parse(file_path) root = tree.getroot() items = [] for item in root.findall('d'): text = item.text.strip() timestamp_str = float(item.attrib['p'].split(',')[0]) # 提取消息显示的时间轴位置 formatted_time = str(datetime.fromtimestamp(timestamp_str)) items.append({ "content": text, "time": formatted_time }) return items ``` 上述函数实现了从远程服务器拉取特定编号影片关联的所有即时聊天消息并将其转换成易于理解的形式储下来供后续分析使用[^2]。 #### 清洗与统计分析 对于收集来的原始弹幕资料而言,在正式投入应用之前往往还需要经历一系列预处理环节,比如去除无关字符、过滤敏感词汇等。之后再基于清理后的高质量语料开展诸如词频计算之类的量化研究活动。 ```python import jieba.analyse import matplotlib.pyplot as plt from wordcloud import WordCloud from collections import Counter # 对中文字符串做分词处理 def tokenize(texts_list): words = [] for line in texts_list: seg_result = list(jieba.cut(line)) filtered_words = filter(lambda w: len(w)>1 and not w.isdigit(), seg_result) # 过滤掉单个字母/数字 words.extend(filtered_words) return words # 绘制词云图像 def plot_word_cloud(word_freq_dist): wc = WordCloud(font_path='/path/to/simhei.ttf', background_color="white").generate_from_frequencies(dict(word_freq_dist.most_common())) plt.imshow(wc, interpolation='bilinear') plt.axis("off") plt.show() if __name__ == '__main__': bv_num = input("请输入要查询的BV号:") basic_data = fetch_basic_info(bv_num) print(f'视频名称:{basic_data["标题"]}\n发布日期:{datetime.utcfromtimestamp(int(basic_data["发布时间"]))}') asyncio.run(download_danmaku(bv_num)) parsed_comments = parse_danmaku('./danmakus.xml') all_texts = ''.join([item['content'] for item in parsed_comments]) tokens = tokenize(all_texts.split()) freq_distribution = Counter(tokens) top_keywords = dict(freq_distribution.most_common(50)) # 输出最常见的前五十个关键字及其出现次数 plot_word_cloud(top_keywords) ``` 这段脚本综合运用多种技术手段完成了对所关注对象全面而深入的理解——不仅限于表面层次的信息检索,更涉及到深层次的内容解读和模式识别层面的工作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值