ホームページ  >  記事  >  バックエンド開発  >  PHP の練習: Bilibili の弾幕データをクロールする

PHP の練習: Bilibili の弾幕データをクロールする

王林
王林オリジナル
2023-06-13 19:08:341976ブラウズ

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 に移動する必要があります。 Web サイトにアクセスして、対応するビデオの番号を確認します。ブラウザ 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。