Python实战:爬取哔哩哔哩【UP主投稿的所有视频】
off999 2024-12-15 16:03 25 浏览 0 评论
上一篇文章提供了一种新的思路,找到了一条捷径,可以绕过 JS 逆向,直接监听接口,从接口的 response 中提取想要的数据。
传送门:Python实战:绕过JS逆向,爬取抖音搜索视频结果
今天,再运用这个思路写一个案例,实现爬取爬取哔哩哔哩 UP 主投稿的所有视频。(本文首发在“程序员coding”公众号)
一、先看结果
程序运行结束后会生成一个 excel 表格,包含 UP主名称、视频标题、视频描述、视频时长、播放数、评论数、弹幕数、发布时间、作者mid、视频aid、视频bvid、是否合作视频、视频链接、作者主页链接、视频封面图、视频属性、typeid 这 17 个字段的信息。
二、环境
(本文首发在“程序员coding”公众号)
python 3.11.5
pycharm
三、模块
from DrissionPage import ChromiumPage
from DataRecorder import Recorder
import time
import os
import datetime
四、分析数据来源
首先在作者主页点击更多,来到投稿视频的页面。
浏览器的开发者工具,点击投稿视频页面的下一页,找到包含视频数据的请求。
在浏览器的开发者工具的 preview 页面查看 response ,可以看到视频在 vlist 这个列表内。
展开第一个视频,可以看到包含的信息如下,是一个 json 格式,可以通过键值对的方法提取出视频信息。
在浏览器的开发者工具的 payload 页面可以看到请求需要携带的参数很多,还有加密的参数。
这种情况下,直接去扣 JS 逆向的话难度很大。
在 headers 页面,找到 requests url ,可以通过关键词监听这个接口,把这串关键词api.bilibili.com/x/space/wbi/arc/search复制出来,下面写代码能用到。
五、思路
1、访问主页
2、监听接口、解析数据
3、循环翻页
六、代码实现过程
1、登录
定义一个 sign_in() 函数,在函数内部使用 DrissionPage 库的 get() 方法,打开哔哩哔哩的网站首页。(本文首发在“程序员coding”公众号)
如果第一次执行代码,需要登录账号,第二次之后运行代码,可以把 sign_in() 函数注释掉不用再次执行这一步骤。
from DrissionPage import ChromiumPage
def sign_in():
""""登录函数"""
sign_in_page = ChromiumPage()
sign_in_page.get('https://www.bilibili.com/')
print('请扫码登录')
2、获取response
通过翻页,可以发现地址规律。变化的只有 pn 的值,可以方便的构造出页面的 url 地址。
(本文首发在“程序员coding”公众号)
def get_response(pn):
""""通过监听接口,获取返回的response"""
# 访问网址
page = ChromiumPage()
url = f'https://space.bilibili.com/{UID}/video?tid=0&pn={pn}&keyword=&order=pubdate'
page.listen.start('api.bilibili.com/x/space/wbi/arc/search', method='GET') # 开始监听,指定获取包含该文本的数据包
page.get(url)
# 等待并获取一个数据包
res = page.listen.wait(timeout=10)
# json_data和浏览器的开发者工区中response一样
json_data = res.response.body
return json_data
3、解析response
通过监听接口,我们获取到了 response ,这是 json 格式的。然后就可以解析 response ,提取每一条视频的信息了。
# videos是所有视频列表
videos = json_data['data']['list']['vlist']
# 提取视频信息
for v in videos:
# 视频 aid
aid = v['aid']
# 视频 bvid
bvid = v['bvid']
# 发布 author
author = v['author']
# 视频标题
title = v['title']
这里只列出其中几个字段的提取方法,其他字段也是类似的方法提取,这个很简单,就不全部介绍了。
4、保存到excel
from DataRecorder import Recorder
import time
# 新建一个excel表格,用来保存数据
formatted_time = time.strftime("%Y-%m-%d %H%M%S", current_time)
init_file_path = f'哔哩哔哩UP主发布的所有视频-{UID}-{formatted_time}.xlsx'
info = {'UP主名称': author, '视频标题': title, '视频描述': description, '视频时长': length, '播放数': play,
'评论数': comment, '弹幕数': video_review, '发布时间': create_time,
'作者mid': author_mid, '视频aid': aid, '视频bvid': bvid, '是否合作视频': is_union_video,
'视频链接': video_url, '作者主页链接': author_url, '视频封面图': pic,
'视频属性': attribute, 'typeid': typeid}
# 保存数据到缓存
r.add_data(info)
# 爬虫结束,避免丢数据,强制保存文件
r.record()
5、main()函数
if __name__ == '__main__':
# 1、登录,第2次运行可以注释掉这一步骤
sign_in()
# 2、UID 是UP主的id
UID = '99157282'
# 3、page_num 是所有视频总共有多少页
page_num = 20
# 4、开始爬取数据
run()
七、操作方法:
在浏览器地址栏可以找到 UP 主的 ID 号,https://space.bilibili.com/99157282/video中的99157282就是UID。
然后找到视频页码数量,也就是 20 页视频。
把这 2 个参数粘贴到代码的 main() 函数中,即可运行代码。
代码运行过程中, Pycharm 控制台输出如下:
八、完整代码
完整的代码经过调试完善可以完美运行,我也亲自多次实验,生成的 excel 表格案例如下。
生成的 excel 表命名包含作者名称、UID、笔记数量、采集日期时间这些信息。
本文首发在“程序员coding”公众号,欢迎关注与我一起交流学习。还可以通过公众号添加我的私人微信。
诚信交友,欢迎沟通交流。
每一份能满足他人需求的努力都值得被付费。
完整代码下载链接:可在“程序员coding”公众号文章获取。
相关推荐
- 把系统装在u盘(把系统装在u盘里的缺点)
-
系统装进U盘有效的方法。1、下载并且安装好大白菜装机版,打开安装好的大白菜装机版,插入u盘等待软件成功读取到u盘之后,点击“一键制作启动u盘”进入下一步操作:2、弹出的信息提示窗口中,选择自己下载的的...
- 恢复出厂设置对电脑有影响吗
-
电脑恢复出厂设置,对系统没有影响,原因如下:1、系统还原是电脑在使用中的一种正常运作,不还原电脑无法正常运行,系统还原是对电脑的维护,不会对电脑或系统造成损害。2、系统还原是一次大容量的数据读写、清除...
- 注册邮箱163免费登录入口官网
-
注册网易邮箱账号步骤如下:1、在浏览器的地址栏输入http://email.163.com/进入网易邮箱的登录页面,点击页面下方的立即注册2、点击立即注册进入邮箱的注册页面,点击页面上面的注册字母邮箱...
- 产品密钥win10专业版激活密钥免费
-
1不存在永久激活密钥,但可以使用一些有效期长的密钥去激活Win10专业版。2Windows10的激活方式是基于数字权利,当你购买Windows10时,系统会将您电脑的硬件信息和购买记录绑定在一起...
- ghostxp系统下载怎么安装教程
-
系统之家下载的XP系统通常是一个ISO镜像文件,安装这个系统需要通过一些步骤来制作可启动安装介质并进行系统安装。以下是安装的基本步骤:准备安装介质:使用工具如Rufus或AnyBurn将下载的ISO文...
- 无线网桥监控安装方法(无线网桥怎么连接监控)
-
网桥连接无线路由器安装的设置方法如下1.主路由器上网正常,副路由器LAN口插一根网线,另一头连接电脑。主副路由器不需要用网线连接。2.电脑开机输入副路由器背面的设置地址,进入登录界面输入背面的账号密码...
- 怎么对电脑文件夹加密(怎么对电脑文件夹加密码)
-
1.右键点要加密的文件或文件夹,然后单击“属性”;2.在“常规”选项卡,点击“高级”。选中“加密内容以便保护数据”复选框;3.在加密文件夹时,系统将询问是否要同时加密它的子文件夹。要如果选择是,那它的...
- windows系统下载手机(win10下载手机)
-
OPPO手机重新下载安装系统:先备份好重要数据!然后手机连接电脑把下载的固件存入手机。然后再长按电源键十秒钟进入关机状态(可拆卸电板的需取下电板然后重新安装)。再同时按住电源键跟音量减键,进入reco...
- 电脑系统分区怎么分(电脑系统分区怎么分区)
-
分区是将硬盘分割成不同的逻辑部分,每个分区可以被视为一个独立的存储设备。通过分区,可以更好地管理数据和操作系统。要进行电脑分区,可以按照以下步骤进行:1.确定分区方案:首先需要确定分区的目的和需求。...
- 电脑显卡怎么选择(电脑显卡怎样选择)
-
以下是一些通用的方法:1.在硬件层面进行配置:首先需要确认您的主板和操作系统是否支持多GPU并行,以及您的电源是否提供足够的功率支持。在BIOS中启用多GPU选项,并安装正确的驱动程序。然后,通...
- 设置软件下载(设置软件下载入口)
-
iphone13app的下载设置1、首先,打开手机桌面的【设置】。2、在设置界面,点击【面容ID与密码】。3、这时设置了键盘锁的会要求你输入键盘锁密码进入。4、进入之后,找到【iTunesStore...
- 电脑麦克风插孔是哪个(电脑麦克风插那)
-
1.蓝色的为音频输入口。一般的电脑后面都有三个音频接口:蓝色是音频输入,绿色是音频输出,粉红色麦克风。 2.音频输入(蓝色),为外接光驱.随身听及其它音频输入设备,即可以把外部的设备声音传送至电脑...
- ie浏览器打不开网页怎么修复
-
第一步:打开“运行”输入—〉cmd—〉回车然后把下面这行字符复制到黑色cmd框里面去回车等待dll文件全部注册完成就关闭可以了(下面是要运行的代码):for%1in(%windir%\syste...
- mail163邮箱登录入口网页版(mail163手机邮箱登录)
-
1.首先你要开启网易的POP3/SMTP/IMAP。2.设置完之后你需要网易的客户端授权密码。3.密码会发送至你的绑定手机。4.用发给你的客户端授权密码登录第三方客户端(ios客户端)5.直接登陆,储...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
