34 爬虫 | Python爬取B站榜排行榜信息

大家好,我是欧K~

本期给大家分享一下如何用python获取B站排行榜的视频信息,包含标题、作者、时长、点赞量、播放量、收藏量、投币、转发量、评论数量、弹幕数量、发布地点、视频描述、链接等信息,希望对大家有所帮助,如有疑问或者需要改进的地方可以联系小编。

所有内容仅供参考,不做他用。

1. 网页分析

目标网址(排行榜):
https://www.bilibili.com/v/popular/rank/all

这个榜单一共有100条,每个时刻可能都不一样(实时榜单)。
接下来,按 F12 或者右键选择审查元素,以第一个视频为例搜索一下:

可以看到这里有个json格式的数据,列表索引0-99,正好100条,打开第一条查看title发现这就是我们榜单的第一条信息,基本上确定这个列表就是我们要的排行榜TOP100了。

2. 爬取数据

2.1 导入模块

import json
import requests
from bs4 import BeautifulSoup
import pandas as pd

2.2 请求网页数据

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36",
}
url = 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
rank = requests.get(url, headers=headers)

2.3 解析json数据

# 标题
title = one_data['title']
# 作者
owner = one_data['owner']['name']
# 发布地点
pub_location = ''
if 'pub_location' in list(one_data.keys()):
    pub_location = one_data['pub_location']
# 描述
desc = one_data['desc']
# 时长
duration = one_data['duration']
stats = one_data['stat']
# 点赞量
like = stats['like']
# 播放量
view = stats['view']
# 收藏量
favorite = stats['favorite']
# 投币
coin = stats['coin']
# 转发量
share = stats['share']
# 评论数量
reply = stats['reply']
# 弹幕数量
danmaku = stats['danmaku']
# 链接
short_link_v2 = one_data['short_link_v2']

2.4 保存结果

df = pd.DataFrame(all_data,columns=cols)
df.to_excel('test.xlsx',index=None)

3. 源码+数据

下载资源