图图今天来聊聊基于MATLAB的爬虫,互联网上真不多见。
下方是图图爬取的成果!
随时感知所有视频,点击超链接直接观看
爬取文本信息
批量获取封面图片,对不住了‘毕导’
爬取图片信息
批量下载视频,B站大学变离线
批量下载视频
[图图/毕导的B站视频合辑下载见文末]
下面进入正题
1. 爬虫是什么?
爬虫是用编程语言构造的检索引擎,它模拟人的浏览行为去各个网站溜达,到处点点按钮、查查数据图片网站用什么程序,然后把看到的有用信息背回来。就像一只“蜘蛛”(爬虫)在“网上”(互联网)爬来爬去。一旦搜集到的信息足够多,就形成了巨大的价值!
•每天使用的搜索引擎,其实就是利用了这种爬虫技术:每天放出无数爬虫到各个网站,把他们的信息抓回来,然后排着小队等你来检索。•抢票软件,帮助你不断刷新12306网站的火车余票。一旦发现有票,就马上拍下来,然后对你喊:快来付款。
对于个人使用者来说,爬虫的作用无非是搜集数据!图图写爬虫程序的出发点也是搜集自己在B站发布的视频与视频封面,方便自己进行统计。
网络上关于Python的爬虫程序铺天盖地,但基于MATLAB制作的爬虫程序少之又少,今天图图来贡献自己的一份力,降低大家的学习成本。爬取的目标是B站,仅对自己感兴趣的数据进行了爬取,包括
•视频UP主•视频标题•视频封面(网址)•视频链接
形成了EXCEL表格;
同时将视频的封面和视频本身下载到了一起。
其它内容原理都是一样的,如果需要更多数据,只要进行简单的输出即可!
2. 爬取B站的原理
总体步骤:输入UP主的编号与视频编号,不断变换、拼接成为路径url,通过MATLAB去模拟浏览器访问url。将访问得到的信息进行整理得到自己想要的关键内容,利用MATLAB输出关键内容。
详细的原理介绍请参考下方文章,非常细致:
https://zhuanlan.zhihu.com/p/148988473
图图此处就列出一些关键点,重点需要关注的有如下信息:
2.1 UP主的mid
mid在UP主个人空间的主页链接中
mid2.2 一条视频的bvid
bvid在视频播放页的地址栏中
有了mid和bvid就基本确定了任意一条视频
2.3F12进入开发者模式查看网页代码
3. 爬取B站的MATLAB代码
须知
•编写环境:MATLAB 2020a•低于MATLAB 2016a确定无法运行,因为其中调用了webread()等函数
3.1 主函数 main()
主函数主要是用于确定爬取的对象图片网站用什么程序,控制爬取的过程,以及决定要保存哪些文件。
A-B-C-D-E-F-G只是为了方便阅读而拆分,实际是按顺序书写在同一个文件中的。
重点关注的输入参数就是mid,即你要爬取哪一个UP主,其它的参数基本都可以不动。delaytime用于设置访问的时间间隔,防止IP被封。qn控制下载视频的清晰度。
在C部分具有options选项用于设置一些访问的方式,有兴趣的可以参考Python中有关的介绍——requests。
D部分用于访问获取所需的数据data,其中就包含了封面图链接和视频链接(播放页面的链接而不是下载链接)。
data是一个结构体,其具体形式如下:
A
% 爬取B站
% -------------------------------------------------------------------------
% 编写时间: 2021/01/15 可能具有时效性,编写环境: MATLAB 2020a
% 参考文档: web('https://zhuanlan.zhihu.com/p/163293093')'
% 访问格式: https://api.bilibili.com/x/space/arc/search?mid=280793434&ps=30&tid=0&pn=1
% mid: UP主编号
% ps: 是当前加载视频的格式;
% tid:一直为 0 即可;
% pn 是翻页;
B
clear;clc;close('all')
%% 初始化目标UP主数据
mid = '254463269';%毕导
ps = '25'; % 视频格式
qn = '112'; % 下载视频清晰度
tid = '0';
pn = '1'; % 从第一页开始
COUNTER = 5; % 控制循环次数
delaytime = 2; % 控制暂停时间
C
%% 设置请求参数
options = weboptions();
options.UserAgent = ...
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3970.5 Safari/537.36';
options.RequestMethod = 'GET';
D
% 发生请求获取数据
data = getBiliData(mid,pn,ps,tid,COUNTER,delaytime,options);
E
%% 保存文本数据
saveCon(data);
F
%% 保存图片数据
savePic(data,delaytime);
G
%% 保存视频文件
saveVid(data,qn,delaytime)
3.2 访问得到数据getBiliData()
用到的核心函数是webread()
详细介绍的网址;
https://www.mathworks.com/help/releases/R2019b/matlab/ref/webread.html
function data = getBiliData(mid,pn,ps,tid,COUNTER,delaytime,options)
% 爬取数据
data.author = [];
data.title = [];
data.video = [];
data.pic = [];
data.bvid = [];
disp('>正在爬取...')
%% 循环读取数据
res = webread(['https://api.bilibili.com/x/space/arc/search?mid=' mid '&ps=' ps '&tid=' tid '&pn=' pn]);
temp = res.data.list.vlist;
while ~isempty(temp) || COUNTER<5
disp([' | 正在爬取第' pn '页!' ]);
data.author = [data.author;{temp.author}'];
data.title = [data.title;{temp.title}'];
data.video = [data.video;{temp.bvid}'];
data.pic = [data.pic;{temp.pic}'];
data.bvid = [data.bvid;{temp.bvid}'];
pn = pn+1;
COUNTER = COUNTER+1;
res = webread(['https://api.bilibili.com/x/space/arc/search?mid=' mid '&ps=' ps '&tid=' tid '&pn=' pn],options);
temp = res.data.list.vlist;
pause(delaytime);
end
for i = 1:size(data.bvid,1)
data.bvid{i} = ['https://www.bilibili.com/video/' data.bvid{i}];
end
disp('__爬取结束!')
3.3 生成文本文件
saveCon(data)
function saveCon(data)
% 保存文本数据
filename = [data.author{1} '__B站视频数据.xlsx'];
writematrix([1:length(data.pic)]',filename,'Sheet','B站视频数据','Range','A2')
writecell(data.author,filename,'Sheet','B站视频数据','Range','B2')
writecell(data.title,filename,'Sheet','B站视频数据','Range','C2')
for i = 1:length(data.pic)
temp{i} = ['http:' data.pic{i}];
end
writecell(temp',filename,'Sheet','B站视频数据','Range','D2')
writecell(data.bvid,filename,'Sheet','B站视频数据','Range','E2')
writecell({'序号' 'UP主' '视频标题' '封面链接' '视频链接'},filename,'Sheet','B站视频数据','Range','A1')
3.3 获取图片与视频文件
未完待续.....
•回复spiderA获取文中资料!•图图的MATLAB交流群:1129425848•欢迎投稿:
版权声明
本文仅代表作者观点。
本文系作者授权发表,未经许可,不得转载。
发表评论