ホームページ バックエンド開発 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 に移動する必要があります。 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 までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Mantianxing ComicsフルバージョンEntann_mantianxingコミック広告スペシャルエディションリンク Mantianxing ComicsフルバージョンEntann_mantianxingコミック広告スペシャルエディションリンク Sep 28, 2025 am 10:30 AM

Mantianxing Comicのフルバージョンはhttps://www.mantianxingmh.comです。このプラットフォームは、情熱、愛、サスペンス、サイエンスフィクションなどのさまざまなテーマをカバーし、豊富なリソースとタイムリーな更新と分類された検索をサポートしています。高解像度の画質、複数のページターニングモード、カスタムバックグラウンドと輝度の調整を提供し、読書体験を最適化するための目の保護モードを備えています。ユーザーは、本棚を作成し、レコードの読み取りを保存し、オフラインをダウンロードし、クロスデバイスの同期の進行状況を達成できます。

PHP mysqlで最後に挿入されたIDを取得するにはどうすればよいですか? PHP mysqlで最後に挿入されたIDを取得するにはどうすればよいですか? Sep 28, 2025 am 05:57 AM

mysqli_insert_id()(手順スタイル)、$ mysqli-> insert_id(オブジェクトスタイル)、または$ pdo-> lastinsertid()()を使用して、最後に挿入されたIDを取得し、同じ接続ですぐに呼び出される必要があります。

PHPでHTMLタグをエコーする方法 PHPでHTMLタグをエコーする方法 Sep 29, 2025 am 02:25 AM

PHPにHTMLを出力するために、単一の引用符または脱出した二重引用符を使用します。属性の引用符の競合を避けるために、文字列を単一の引用符で巻くことをお勧めします。動的なコンテンツは、可変スプライシングまたはHeredoc構文と組み合わせて生成できます。

PHPで最終クラスとメソッドを使用する方法は? PHPで最終クラスとメソッドを使用する方法は? Sep 28, 2025 am 05:55 AM

finalClassESSANDMETHODSINPPREVENTINTANCHENDOVERIDINGTOPROTECTCRITICLICODE.2.AFINALCLASSCANNOTBEEXTEDED.3.AFINALMETHODCANNOTBEOVERDINDCANTCONSTIMPRENTIONSACROSSSUBCLASSES.4.USEFINFINEFORESTURET

PHPでGet Request変数を操作する方法は? PHPでGet Request変数を操作する方法は? Sep 29, 2025 am 01:30 AM

$ _gettoaccessurlquelystringvariablesinphpを使用します。

特性とは何ですか、そしてそれらをPHPで使用する方法 特性とは何ですか、そしてそれらをPHPで使用する方法 Oct 02, 2025 am 04:17 AM

praitsinphpenablehorizo​​ntalcodereusebyalowingclasseStoinheritmethods fromreusabletraitcontainers、bypassingsingleinheritancelimits

MBTI無料テスト公式WebサイトEntrant_MBTI無料テストWebサイトURLリンク MBTI無料テスト公式WebサイトEntrant_MBTI無料テストWebサイトURLリンク Sep 28, 2025 am 10:00 AM

MBTI無料テストWebサイトの公式入り口はhttps://www.16personalities.com/です。このWebサイトは、中国語と英語版のテストを提供し、パーソナリティディメンション分析、パーソナライズされたレポート、マルチシナリオアプリケーションの提案をカバーし、ユーザーが自分の性格タイプの詳細な理解を得るのに役立ちます。

set_error_handlerを使用してPHPでカスタムエラーハンドラーを作成する方法 set_error_handlerを使用してPHPでカスタムエラーハンドラーを作成する方法 Oct 02, 2025 am 03:54 AM

set_error_handlerinphpenablescustomerrorhandlingbydefining afunction ot interceptss recoverableerrors、controllollogledlogginger-friendlyresponses; itacceptssparametersils; itacceptssparameterslike;

See all articles