首页 后端开发 php教程 PHP 实战:爬取 Bilibili 弹幕数据

PHP 实战:爬取 Bilibili 弹幕数据

Jun 13, 2023 pm 07:08 PM
php 爬虫 弹幕

Bilibili 是一个盛行于中国的弹幕视频网站,也是一片宝藏,里面蕴藏着各种各样的数据。其中弹幕数据是一项非常有价值的资源,因此许多数据分析师和研究人员都希望能够获取这些数据。在本文中,我将介绍使用 PHP 语言实现爬取 Bilibili 弹幕数据。

  1. 准备工作

在开始爬取弹幕数据之前,我们需要安装一个 PHP 爬虫框架 Symphony 2。可以通过以下命令进行安装:

$ curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony
$ chmod a+x /usr/local/bin/symfony

之后我们需要使用 Composer 安装 GuzzleHttp 和 PHP-DI 依赖库:

$ composer require guzzlehttp/guzzle php-di/php-di

接着,我们需要到 Bilibili 网站中查找对应的视频的编号,可以通过浏览器 F12 开发者工具获取。

  1. 爬取弹幕数据

在获取到 Bilibili 视频的编号之后,我们可以使用 GuzzleHttp 发送 GET 请求获取数据,从而获得视频中的弹幕列表信息。以下是获取数据的代码:

$client = new GuzzleHttpClient();
$res = $client->request('GET', "https://api.bilibili.com/x/v1/dm/list.so?oid={$oid}");
$xml = simplexml_load_string($res->getBody(), 'SimpleXMLElement', LIBXML_NOCDATA);

在成功获取到弹幕列表信息之后,我们将其封装为一个数组:

$items = [];

foreach ($xml->d->p as $p) {
    list($time, $type, $size, $color, $time) = explode(",", $p['p']);
    $content = (string) $p;
    $items[] = [
        'time' => (float) $time,
        'content' => $content
    ];
}

在我们成功获取到弹幕数据之后,我们可以将其保存到数据库中,以便后续的分析与使用:

$builder = $this->db->createQueryBuilder();
foreach ($items as $item) {
    $builder->insert('danmaku')
            ->values([
                '`time`' => ':time',
                '`content`' => ':content'
            ])
            ->setParameters([
                ':time' => $item['time'],
                ':content' => $item['content']
            ])
            ->execute();
}
  1. 分析弹幕数据

接下来,我们可以开始对获取到的弹幕数据进行分析和展示。我们可以使用 PHP 配合 Highcharts 这个数据可视化工具 来构建一个弹幕数量的图表。以下是展示数据和代码实现:

$builder = $this->db->createQueryBuilder();

$data = $builder->select('COUNT(*) as cnt, FLOOR(`time`) as time')
                ->from('danmaku')
                ->groupBy('floor(`time`)')
                ->execute()
                ->fetchAll(PDO::FETCH_ASSOC);

echo $twig->render('danmaku.html.twig', [
    'data' => $data
]);
Highcharts.chart('container', {
    chart: {
        type: 'spline'
    },
    title: {
        text: '弹幕数量'
    },
    xAxis: {
        title: {
            text: '时间'
        }
    },
    yAxis: {
        title: {
            text: '数量'
        }
    },
    credits: {
        enabled: false
    },
    series: [{
        name: '弹幕数量',
        data: {{ data | json_encode }}
    }]
});
  1. 结束语

通过该篇文章,我们已经成功使用 PHP 爬虫框架 Symphony 2 实现了爬取 Bilibili 弹幕数据的功能,并对获取到的数据进行了分析,生成了一个弹幕数量的图表。这个过程中,我们学会了如何使用 PHP 发送 GET 请求获取 Bilibili 视频弹幕数据,以及如何使用 Highcharts 来展示数据。

以上是PHP 实战:爬取 Bilibili 弹幕数据的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

PHP教程
1600
276
如何使用PHP中的阵列 如何使用PHP中的阵列 Aug 20, 2025 pm 07:01 PM

phparrayshandledatAcollectionsefefityIndexedorassociativuctures; hearecreatedWithArray()或[],访问decessedviakeys,modifybyAssignment,iteratifybyAssign,iteratedwithforeach,andManipulationUsfunsionsFunctionsLikeCountLikeCountLikeCountLikeCountLikecount()

修复:以太网'身份不明网络” 修复:以太网'身份不明网络” Aug 12, 2025 pm 01:53 PM

Restartyourrouterandcomputertoresolvetemporaryglitches.2.RuntheNetworkTroubleshooterviathesystemtraytoautomaticallyfixcommonissues.3.RenewtheIPaddressusingCommandPromptasadministratorbyrunningipconfig/release,ipconfig/renew,netshwinsockreset,andnetsh

如何在php中使用$ _cookie变量 如何在php中使用$ _cookie变量 Aug 20, 2025 pm 07:00 PM

$_COOKIEisaPHPsuperglobalforaccessingcookiessentbythebrowser;cookiesaresetusingsetcookie()beforeoutput,readvia$_COOKIE['name'],updatedbyresendingwithnewvalues,anddeletedbysettinganexpiredtimestamp,withsecuritybestpracticesincludinghttponly,secureflag

描述观察者的设计模式及其在PHP中的实现。 描述观察者的设计模式及其在PHP中的实现。 Aug 15, 2025 pm 01:54 PM

TheObserverdesignpatternenablesautomaticnotificationofdependentobjectswhenasubject'sstatechanges.1)Itdefinesaone-to-manydependencybetweenobjects;2)Thesubjectmaintainsalistofobserversandnotifiesthemviaacommoninterface;3)Observersimplementanupdatemetho

PHPMYADMIN安全最佳实践 PHPMYADMIN安全最佳实践 Aug 17, 2025 am 01:56 AM

要有效保护phpMyAdmin,必须采取多层安全措施。1.通过IP限制访问,仅允许可信IP连接;2.修改默认URL路径为不易猜测的名称;3.使用强密码并创建权限最小化的专用MySQL用户,推荐启用双因素认证;4.保持phpMyAdmin版本最新以修复已知漏洞;5.加固Web服务器和PHP配置,禁用危险函数并限制文件执行;6.强制使用HTTPS加密通信,防止凭证泄露;7.不使用时禁用phpMyAdmin或增加HTTP基本认证;8.定期监控日志并配置fail2ban防御暴力破解;9.删除setup和

使用XSLT参数创建动态转换 使用XSLT参数创建动态转换 Aug 17, 2025 am 09:16 AM

XSLT参数是通过外部传递值来实现动态转换的关键机制,1.使用声明参数并可设置默认值;2.从应用程序代码(如C#)通过XsltArgumentList等接口传入实际值;3.在模板中通过$paramName引用参数控制条件处理、本地化、数据过滤或输出格式;4.最佳实践包括使用有意义的名称、提供默认值、分组相关参数并进行值验证。合理使用参数可使XSLT样式表具备高复用性和可维护性,相同样式表能根据不同输入产生多样化输出结果。

您目前尚未使用附上的显示器[固定] 您目前尚未使用附上的显示器[固定] Aug 19, 2025 am 12:12 AM

Ifyousee"YouarenotusingadisplayattachedtoanNVIDIAGPU,"ensureyourmonitorisconnectedtotheNVIDIAGPUport,configuredisplaysettingsinNVIDIAControlPanel,updatedriversusingDDUandcleaninstall,andsettheprimaryGPUtodiscreteinBIOS/UEFI.Restartaftereach

您将如何在PHP应用程序中实现API版本? 您将如何在PHP应用程序中实现API版本? Aug 14, 2025 pm 11:14 PM

APIversioninginPHPcanbeeffectivelyimplementedusingURL,header,orqueryparameterapproaches,withURLandheaderversioningbeingmostrecommended.1.ForURL-basedversioning,includetheversionintheroute(e.g.,/v1/users)andorganizecontrollersinversioneddirectories,ro

See all articles