Bilibiliは中国で人気の弾幕動画サイトですが、あらゆるデータが揃っている宝庫でもあります。中でも弾幕データは非常に貴重な資料であり、多くのデータアナリストや研究者がこのデータの入手を望んでいます。この記事では、PHP言語を使用してBilibiliの弾幕データをクロールする方法を紹介します。
弾幕データのクロールを開始する前に、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 に移動する必要があります。 Web サイトにアクセスして、対応するビデオの番号を確認します。ブラウザ F12 開発者ツールを通じて取得できます。
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(); }
次に、取得した弾幕データの分析を開始できます。データが分析され、表示されます。 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 }} }] });
この記事を通じて、PHP クローラー フレームワーク Symphony 2 を使用して Bilibili の弾幕データ関数をクロールすることに成功しました。 、取得したデータを分析し、弾幕数のグラフを作成しました。このプロセスでは、PHP を使用して GET リクエストを送信して Bilibili ビデオの弾幕データを取得する方法と、Highcharts を使用してデータを表示する方法を学びました。
以上がPHP の練習: Bilibili の弾幕データをクロールするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。