0

    MATLAB爬虫程序,批量获取文本、图片和视频(中)

    2023.05.28 | admin | 154次围观

    图图今天来聊聊基于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);   endfor i = 1:size(data.bvid,1)    data.bvid{i} = ['https://www.bilibili.com/video/' data.bvid{i}];enddisp('__爬取结束!')

    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}];endwritecell(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•欢迎投稿:

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论