B站视频信息爬取

B站数据可视化视频逐渐流行,想做一期B站视频类型的数据分析,故开始爬取视频信息,来挖掘内容。

爬虫思路

B站视频爬取思维导图

网页分析

目标是爬取每个视频的av号、视频标题、视频类型、上传时间、作者(UP主)、弹幕数、评论数、收藏数、投币数、点赞数。
在这里插入图片描述
在这里插入图片描述
看起来很简单嘛,需要的内容都可以从网页源代码获取,简单的正则处理就好了。。。然而事实是这样吗?

import urllib.request

response = urllib.request.urlopen("https://www.bilibili.com/video/av2/")
print(response.info())
print(response.read())
response.close()

在运行过后,403 错误,服务器拒绝了我们的访问。

运行结果
HTTPError: HTTP Error 403: Forbidden

这是我们本次爬虫遇到的第一个坑。在浏览器中能正常返回响应,但是直接打开请求链接时,却会被服务器拒绝。
第一反应是,静态爬取方式不行,就用动态的爬取方式吧,找它的js加载。
view?aid=2
stat?aid=2
OK,我们需要的数据都在这了,view?aid还包括了视频的标题,作者,视频类型等,就决定是你了。(注意视频的审核通过时间ctime在源代码处为Unix时间戳,后续须做格式转换)
在这里插入图片描述
获取它的URL,很明显的是https://api.bilibili.com/x/web-interface/view?aid=2,通过多个视频网页对比分析,’2‘为每个视频的av号。

测试下能否获取

  • 9
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
Python爬取B站热门视频信息,需要用到requests和BeautifulSoup库。下面是一些大致步骤: 1. 发送请求获取网页源代码 2. 解析网页源代码,获取视频信息 3. 存储数据 具体的代码实现可以参考以下步骤: 1. 导入requests和BeautifulSoup库 ``` import requests from bs4 import BeautifulSoup ``` 2. 发送请求获取网页源代码 ``` url = 'https://www.bilibili.com/v/popular/rank/all' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) html = response.text ``` 3. 解析网页源代码,获取视频信息 ``` soup = BeautifulSoup(html, 'html.parser') video_list = soup.find_all('li', class_='rank-item') for video in video_list: title = video.find('a', class_='title').text.strip() author = video.find('a', class_='name').text.strip() play = video.find('span', class_='data-box').find_all('span').text.strip() danmu = video.find('span', class_='data-box').find_all('span').text.strip() print('标题:', title) print('作者:', author) print('播放量:', play) print('弹幕数:', danmu) ``` 4. 存储数据 可以将数据存储到本地文件中,也可以将数据存储到数据库中。这里以将数据存储到本地文件中为例: ``` with open('bilibili.txt', 'w', encoding='utf-8') as f: for video in video_list: title = video.find('a', class_='title').text.strip() author = video.find('a', class_='name').text.strip() play = video.find('span', class_='data-box').find_all('span').text.strip() danmu = video.find('span', class_='data-box').find_all('span').text.strip() f.write('标题:{}\n作者:{}\n播放量:{}\n弹幕数:{}\n\n'.format(title, author, play, danmu)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值