Compare commits

...

7 Commits
1.1 ... main

@ -1,2 +0,0 @@
# 1.1

131
main

@ -0,0 +1,131 @@
import re
import requests
from multiprocessing.dummy import Pool
from tqdm import tqdm
import pandas as pd
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 配置常量
KEYWORD = "2024 巴黎奥运会"
DANMU_KEYWORD = "AI" # 过滤弹幕中的关键字
PAGENUM = 10 # 设置要爬取的页面数量
WORKERS = 6 # 线程池工作线程数
# HTTP请求头部
HEADERS = {
"cookie": "your_cookie_here", # 替换为实际cookie
'origin': 'https://www.bilibili.com',
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"referer": "https://t.bilibili.com/?spm_id_from=333.337.0.0",
}
def get_search_results_html(page: int) -> str:
"""获取搜索结果页面的HTML内容"""
url = f"https://search.bilibili.com/all?keyword={KEYWORD}&order=click&page={page}"
try:
response = requests.get(url, headers=HEADERS)
response.raise_for_status()
return response.text
except requests.RequestException as e:
print(f"Error fetching page {page}: {e}")
return ""
def get_bvs(html: str) -> list:
"""从HTML内容中提取BVs"""
return re.findall(r'bvid:"([^"]+)"', html)
def get_info(vid: str) -> dict:
"""获取视频信息"""
url = f"https://api.bilibili.com/x/web-interface/view/detail?bvid={vid}"
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
if 'data' in data:
info = {
"标题": data["data"]["View"]["title"],
"cid": [dic["cid"] for dic in data["data"]["View"]["pages"]]
}
return info
except requests.RequestException as e:
print(f"Error fetching info for vid {vid}: {e}")
return {}
def get_danmu(info: dict) -> list:
"""获取视频的弹幕"""
all_dms = []
for cid in info.get("cid", []):
url = f"https://api.bilibili.com/x/v1/dm/list.so?oid={cid}"
try:
response = requests.get(url)
response.encoding = "utf-8"
data = re.findall('<d p="(.*?)">(.*?)</d>', response.text)
dms = [d[1] for d in data if DANMU_KEYWORD in d[1]] # 过滤包含AI的弹幕
all_dms += dms
except requests.RequestException as e:
print(f"Error fetching danmu for cid {cid}: {e}")
print(f"获取弹幕{len(all_dms)}条!")
return all_dms
def save_danmu(bv: str, danmu_data: list):
"""将弹幕保存到文本文件和Excel中"""
df = pd.DataFrame(danmu_data, columns=['弹幕'])
df.to_excel(f"./{KEYWORD}弹幕.xlsx", index=False, mode='a', header=not pd.io.common.file_exists(f"./{KEYWORD}弹幕.xlsx"))
def main():
"""主函数:爬取视频信息和弹幕"""
pool = Pool(WORKERS)
htmls = pool.map(get_search_results_html, range(1, PAGENUM + 1))
bvs = []
for html in htmls:
bvs.extend(get_bvs(html))
# 限制为前三百个视频
bvs = bvs[:300]
all_danmu = []
# 爬取弹幕
for bv in tqdm(bvs, desc="正在爬取弹幕"):
info = get_info(bv继续完成上述Python代码确保我们可以爬取B站弹幕、保存到Excel文件并生成词云图。
### 继续的代码
```python
if info:
danmu = get_danmu(info)
all_danmu.extend(danmu)
# 统计AI相关弹幕数量
counter = Counter(all_danmu)
top_danmu = counter.most_common(8)
# 输出前8的弹幕
print("AI相关弹幕统计数量排名前8")
for text, count in top_danmu:
print(f"{text}: {count}")
# 将弹幕数据写入Excel
save_danmu(KEYWORD, all_danmu)
# 生成词云图
generate_wordcloud(all_danmu)
def generate_wordcloud(danmu_data):
"""生成弹幕的词云图"""
text = " ".join(danmu_data)
wordcloud = WordCloud(width=800, height=400, background_color='white').generate(text)
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title("弹幕词云图")
plt.show()
if __name__ == "__main__":
main()

@ -0,0 +1,5 @@
requests
pandas
tqdm
wordcloud
matplotlib

366
弹幕

@ -0,0 +1,366 @@
女王驾到
到陈梦这里欢呼小了好多
最后一举举教练
蝉联奥运冠军 陈梦以绝伦的技术和心理素质取胜
可惜体操队
团队艺术体操与花样游泳真的太争气了
跳水YYDS
王炸
最后两枚决定性的举重和拳击金牌呢
这两个划船,印象深刻
可惜了杨柳,战胜了所有人,输给了性别
真季博稳啊
siuuuuuu
中国队加油!
虽败犹容
大满贯樊振东
紫薯们:没理由的,面对我们还能拿到这么多金牌
女子体操队厉害
他们的优势项的小项目太多了,我们能在金牌数上追平他们已经很不容易了
潘战神无敌
这个拥抱的外国选手我印象好深,他的笑容很有感染力
她是自费参加的奥运会
神!
老潘牛比!!!!
喂~俺个炊饼~马飞~
铠甲 合体!
游泳100米太有含金量了
看看国乒女团可爱的大家吧,不要再伤害两位小姑娘了
再说一遍44金!中国44金
体操男团那块金牌可惜了,没拿到~
应该是44金
步惊云!
这么难还能取得这个成绩太不容易了
全靠苏伟德选手
我们的镇国大公主
uzi
八朵金花
续写乒乓辉煌
超强的耐力和身体素质 竞走金牌得主
天才姐妹花
大身位领先可厉害了
小小身体大大能量
姑娘们形象气质真好!
陈梦牛啊,鼓掌
所有站上去的只有陈梦最憋屈!现场大喊你不配和退票
谢谢精灵的协助
喂~俺个炊饼~马飞~
为什么是并列第一,就金牌跟老美一样,理论上应该是第二,不理解为啥说第一
地表最强双杠
姑娘们太棒了,自尊自强自信自立自爱是我们的底色!
潘神 世界上游的最快的男人
好厉害李发彬
天策排面
41金 谢谢 孩神的街霸6也得算进去
已经习惯了习惯了
一银!(不要忘记小豆包)
你“翻身“在后面呢搁人家这边只剩酸了哈哈
如果苏少不上场,我们会多一块金牌~
为陈梦鼓掌
金牌榜第一我们是44金
集体金牌就是最珍贵的
国乒五金!
三帝
梦姐
江苏人民发来贺电
中国万岁万岁万万岁
44金才对
军爷牛逼
这是打算宣布个事
这些人都是我们的骄傲啊
这个美国小伙,也是很牛的!有自闭症还拿了奖牌,现实版阿甘
法式军礼是吧
游泳
泪目
中国只在乎金牌,美国在乎奖牌总数
重量级可爱
全国人民为你们感到骄傲
最自信最洋气的跳水女子冠军
国羽女双 包揽金银
国羽辉煌
默契配合勇战巅峰
冷静淡定必杀技
只要勇敢相信 一起皆有可能
大力士
大力王
这位哥也是牛逼
梦梦牛逼
这位也是厉害
牛逼
哈,我的一个物理老师也叫刘洋
你的時代還在延續!!
陈梦牛牛牛
中国44金
龙头胖无敌!
美美美
45金杨柳也是
辛苦了~
金牌榜并列第一,奖牌榜第二
第二也不错
金牌榜是第一,但总榜单不是
更正44金
中华之光!
杨柳值得一块金牌
Queen Wen~~!
四大男神
好可爱
1111111
中国万岁!
此生不悔入华夏,来世还在中华家
四大天王!
中国加油
坤司太帅了!!!!!
关我什么事?
雅思!
查查贵妇人
nb
nb
好感动啊
这个衔接神了
唯一真神
神中神
6666666666666666666666666666666666666666666666666666666
666
家禾们 泪目了
最激动人心的时刻
最强
潘队牛!
陈梦
重量级选手登场doge
忠!诚!
小胖啊啊啊啊啊你辛苦啦
不要自欺欺人,每个国家参赛名额有限制的啊
44
女王啊啊
大头都三个牌了啊
郑钦文牛!
陈梦!!!
体操姑娘们太美了
算上台湾和香港的4金是44金好吗
巨分园
东哥牛壁
女王
马龙—我就溜达溜达
《无敌之姿》
网球这个真是太牛逼了
请选择你的胜利结算画面
不熨烫就挂起来了,法国人有过于松弛
郑钦文牛逼!
Siuuuuuuuuuuu
开幕死侍与金刚狼
饭圈双圣
奥利给
太激动了中国最棒
又是这个歌
襄阳二娃子牛逼
可惜男子体操出了个臭子
马龙∽
背景太吵
以为在看动森
跳水GOAT
是44金
女王!
雅思!
小胖!!!
陈梦!!
来福:我感觉我要挨打
辛苦了
男子团体体操和杨柳可惜了,但他们依然很棒!!还有那些银牌和铜牌的,不要忘了他们!!我翻了奥运项目记录,其实我们基本每个项目都拿到奖了
他们不是神,只是努力的普通人
梦姐!!
这一蹦好厉害
男单的金牌又没丢
祝贺女团
东哥
为大梦打CALL
最有含金量的一枚
续写不败
女王 我的神
好漂亮呀
卫冕冠军!
好牛啊
太牛
东哥
别人那喜悦祝贺的神情再看看网络义和团。。
应该给体操男团也发上去,除了他
拳击也是史无前例啊
阿伟罗跪下
美国第一
歌曲不分国界
潘神!
潘神!
什么44金啊
男子体操真的可惜,不过别灰心,下届再战
现在看来,开幕式也是别出心裁,精彩纷呈
营销号
真季博文呐~
哈哈哈哈 太可爱了
这俩位姐是深圳南山外国语的!
金牌多老百姓开心,咋滴?你们金主没干过我们你们不开心了不是吗?哈哈哈哈
女王驾到
破纪录选手
第二硬要說第一 嘴真硬
呃……奥运会开幕了?!咦……奥运会闭幕了?!
银莎粉破防了
科比
安踏排面
哈哈哈,雯雯很棒棒
好!!!!!
我们玉溪人
镇国大公主
大哥男单拍子坏了樊振东也是冠军啊
从历届奥林匹克来看我们是在不断退步
换句话就是中不在乎拿不到金牌的运动员
没有俄罗斯的奥运会不算奥运会
虽败
超级飞鱼!
50米长枪独守大唐魂
东哥
还有中国台湾
苏伟德的含金量还在上升
陈梦
陈梦!
美丽
中华崛起!
东哥牛壁
厉害啊!加油!
超燃
半场开香槟
体操男团痛失一枚
本来应该是41金男单乒乓牌子坏了
真正的legend
goat
总奖牌第二
四年磨一剑!太厉害了
体操团体真的可惜,差那么大的比分都输
最棒津濟還出問題
群星闪耀时
这是金牌数和老美持平,银和铜还差很多,标题有误导的意思。
我们是冠军 现在已经变成贬义词了 别乱用!
真神
老百姓高兴啊
田径呢,一个都没有啊
潘战神
巴黎图书馆
厉不厉害你坤哥
Queen
咋们老练家的骄傲
跳水
团体气枪?
在法国当然要入乡随俗,行法式礼仪
我们应该是44金才对
伟大
我们凡尘555
芜湖
金牌榜并列第一,注意是并列,总奖牌第二
什么文?
我的圆圆
神精
女性能顶半边天
力量与美,勇气与坚韧,我中华民族自强不息
恭喜我的国
这样举手总感觉在投降
祝贺
这个美国妞不错
鼓掌
绝对C位
辛苦了
We are the champion
这个国家,让我感到“信服”
潘神!!
真神
无人能敌的完美双杠技术 比赛如同个人表演
一步一个脚印
三位是中国乒乓球骄傲,感谢你们
以完美稳定的发挥,女子团体艺术体操终获奥运金牌
国兵辉煌代代传
怎么搞一首英文bgm中国没有歌了吗
斗志与耐性更是技惊四座
女生不仅拥有美貌更拥有力量,强悍和不服输的勇气
终于圆梦
征战三次奥运中原么买个
教科书般的吊环技术 蝉联冠军
牛逼的中国跳水队
世界记录保持者大将风范
校友!
打破欧美人的幻想
小轮车首枚金牌 古风发簪彰显民族自信
跳水梦之队
坚持就是胜利相信自己
中国跳水新力量 代代出人才
自古英雄出少年
大宝贝
努力的姑娘最美
两位纯爷们
东哥牛逼
祖国万岁
创世纪
牛逼
到陈梦这里鼓掌欢呼的少了好多
44金噢
乌海上大分
法师军礼
管泽元!
樊神牛逼
樊神呢怎么老是出现32强
感觉好自豪啊,哈哈
祝贺黄雅琼收获爱情事业双满贯
辛苦啦
实至名归!
图书馆
奥委会排名还没有法国排的好
最强
未来可期
强的
平手
辛苦了~
辛苦了~
辛苦了~
完结撒花
俩活宝
东哥!
最安静的一幕
完结撒花
完结撒花
完结撒花
美国总奖牌比我们多太多
强无敌绷不住了
辛苦了~
辛苦了~
辛苦了~
辛苦了~
辛苦了~
辛苦了~
完结撒花
完结撒花
完结撒花
樊振东牛逼
辛苦了~
完结撒花
完结撒花
东哥
老牌了
陈梦牛逼!
我们是44金
输给大哥姐的那场拳击算金牌
中国红
不是第二吗?
可喜可贺可喜可贺
我们不是42吗
[OHHHHHHHH~~~~~]
[OHHHHHHHHHHHHHHHHHHHHHHH~~~~~~~~~~~~]
并列第一?
不愧是兔子,一个一个都蹦蹦跳跳的
1
神!
中国人民胜利了!!!
兔子代表队实锤了哈哈哈哈哈
别高兴了~中美金牌一样多

@ -0,0 +1,34 @@
8K好看
8K牛逼
这是3D吧应该也是8K
这个直播好清楚应该是8K
这个直播是8K的吗
这是AI弄得8K吗
第一次见8K
8K超高清牛逼
8K超高清
这个最后一回合太帅了,五发全中
郑钦文和潘展乐
太牛了
我们艺术体操打败了疯狂注水的以色列
艺术体操真的打破了欧洲的垄断
27场
紫薯脸
张山是双向飞碟。齐迎得的是多向飞碟,不一样项目
还有女子曲棍球
太强了
太nb了
夺少连胜??!!!!
摔跤呢?
居然能赢了新西兰,牛逼
塔希提岛,法属殖民地,高更就是在那里画画
88年92年04年
而且力压水漫金山的以色列
哈哈哈哈哈哈哈哈哈哈哈哈哈哈,夺笋呐
遇鬼必强
张山是双向飞碟
女曲教练也功不可没
花游两枚金牌中国都包揽了!
张山
0421吧
飞碟的冠军决赛就空了两枪,输得不冤
Loading…
Cancel
Save