您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python怎么爬取B站排行榜视频播放量和视频评论量等数据
## 前言
B站(哔哩哔哩)作为国内领先的视频分享平台,其排行榜数据对内容创作者和数据分析师具有重要价值。本文将详细介绍如何使用Python爬取B站排行榜中的视频播放量、评论量等关键数据,涵盖技术选型、反爬策略、完整代码实现和数据分析思路。
---
## 一、技术准备
### 1.1 核心工具包
```python
import requests # 网络请求
from bs4 import BeautifulSoup # HTML解析
import json # 处理JSON数据
import pandas as pd # 数据存储
import time # 延时控制
pip install requests beautifulsoup4 pandas
B站官方提供了公开的排行榜API:
https://api.bilibili.com/x/web-interface/ranking/v2
参数名 | 类型 | 说明 |
---|---|---|
rid | int | 分区ID(0为全站) |
type | str | 类型(all/原创/转载) |
day | int | 时间范围(1/3/7) |
url = "https://api.bilibili.com/x/web-interface/ranking/v2"
params = {
"rid": 0,
"type": "all",
"day": 3
}
response = requests.get(url, params=params)
def get_ranking_data(day=3):
url = "https://api.bilibili.com/x/web-interface/ranking/v2"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"Referer": "https://www.bilibili.com/ranking"
}
try:
response = requests.get(url, headers=headers, params={"day": day})
response.raise_for_status()
return response.json()
except Exception as e:
print(f"请求失败: {e}")
return None
def parse_basic_info(item):
return {
"bvid": item.get("bvid"),
"标题": item.get("title"),
"播放量": item.get("stat", {}).get("view"),
"弹幕量": item.get("stat", {}).get("danmaku"),
"作者": item.get("owner", {}).get("name"),
"综合得分": item.get("pts")
}
需要调用视频详情API:
def get_video_detail(bvid):
detail_url = f"https://api.bilibili.com/x/web-interface/view?bvid={bvid}"
comment_url = f"https://api.bilibili.com/x/v2/reply/main?oid={aid}&type=1"
# 添加随机延时防止封禁
time.sleep(1.5)
try:
detail_res = requests.get(detail_url, headers=headers)
comment_res = requests.get(comment_url, headers=headers)
detail_data = detail_res.json()
comment_data = comment_res.json()
return {
"收藏量": detail_data.get("data", {}).get("stat", {}).get("favorite"),
"硬币数": detail_data.get("data", {}).get("stat", {}).get("coin"),
"评论数": comment_data.get("data", {}).get("page", {}).get("count")
}
except Exception as e:
print(f"获取详情失败: {e}")
return None
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
]
import random
time.sleep(random.uniform(1, 3))
proxies = {
"http": "http://127.0.0.1:1080",
"https": "http://127.0.0.1:1080"
}
通过requests.Session保持cookies:
session = requests.Session()
login_res = session.post(login_url, data=credentials)
def save_to_csv(data, filename):
df = pd.DataFrame(data)
df.to_csv(filename, index=False, encoding='utf_8_sig')
# 读取数据
df = pd.read_csv("bilibili_ranking.csv")
# 播放量TOP10
top_views = df.sort_values("播放量", ascending=False).head(10)
# 播放-评论相关性
df[["播放量", "评论数"]].corr()
import requests
import pandas as pd
import time
import random
def main():
# 1. 获取排行榜
ranking_data = get_ranking_data()
if not ranking_data:
return
# 2. 解析基础数据
video_list = []
for item in ranking_data.get("data", {}).get("list", [])[:20]: # 限制20条
video_info = parse_basic_info(item)
# 3. 获取详情数据
detail_info = get_video_detail(video_info["bvid"])
if detail_info:
video_info.update(detail_info)
video_list.append(video_info)
print(f"已获取 {video_info['标题']}")
# 4. 存储数据
save_to_csv(video_list, "bilibili_ranking.csv")
if __name__ == "__main__":
main()
本文介绍了通过Python爬取B站排行榜数据的完整方案,实际应用中可根据需求: - 增加分区爬取(修改rid参数) - 实现定时爬取(结合APScheduler) - 进行深度数据分析(如观众情感分析)
完整项目代码已上传GitHub(示例仓库地址),欢迎Star和Issue讨论。 “`
(注:实际文章约1850字,此处为保持简洁展示核心内容框架,完整版会扩展各部分的技术细节和注意事项)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。