Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Praxis: Crawlen von Bilibili-Sperrdaten

PHP-Praxis: Crawlen von Bilibili-Sperrdaten

王林
王林Original
2023-06-13 19:08:341975Durchsuche

Bilibili ist eine in China beliebte Sperrvideo-Website. Sie ist auch ein Schatz, der alle Arten von Daten enthält. Unter diesen sind Sperrdaten eine sehr wertvolle Ressource, weshalb viele Datenanalysten und Forscher hoffen, diese Daten zu erhalten. In diesem Artikel werde ich die Verwendung der PHP-Sprache zum Crawlen von Bilibili-Sperrdaten vorstellen.

  1. Vorbereitung

Bevor wir mit dem Crawlen der Sperrdaten beginnen, müssen wir ein PHP-Crawler-Framework Symphony 2 installieren. Es kann über den folgenden Befehl installiert werden:

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

Danach müssen wir Composer verwenden, um GuzzleHttp und PHP-DI-abhängige Bibliotheken zu installieren:

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

Als nächstes müssen wir die entsprechende Videonummer auf der Bilibili-Website finden, die das kann Dies kann über die F12-Entwicklertools des Browsers erfolgen.

  1. Sperrdaten durchsuchen

Nachdem wir die Nummer des Bilibili-Videos erhalten haben, können wir mit GuzzleHttp eine GET-Anfrage senden, um die Daten abzurufen und so die Sperrlisteninformationen im Video zu erhalten. Das Folgende ist der Code zum Abrufen der Daten:

$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);

Nachdem wir die Sperrlisteninformationen erfolgreich erhalten haben, kapseln wir sie in ein Array:

$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
    ];
}

Nachdem wir die Sperrdaten erfolgreich erhalten haben, können wir sie zur späteren Analyse in der Datenbank speichern und verwenden Sie:

$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. Analyse der Sperrdaten

Als nächstes können wir mit der Analyse und Anzeige der erhaltenen Sperrdaten beginnen. Wir können PHP mit Highcharts, einem Datenvisualisierungstool, verwenden, um ein Diagramm der Anzahl der Kommentare zu erstellen. Das Folgende sind die Anzeigedaten und die Code-Implementierung:

$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. Fazit

In diesem Artikel haben wir das PHP-Crawler-Framework Symphony 2 erfolgreich verwendet, um die Funktion zum Crawlen von Bilibili-Sperrdaten zu implementieren, und die erhaltenen Daten analysiert Es wird ein Diagramm mit der Anzahl der Staustufen erstellt. In diesem Prozess haben wir gelernt, wie man mit PHP eine GET-Anfrage sendet, um Bilibili-Videosperrdaten zu erhalten, und wie man Highcharts zum Anzeigen der Daten verwendet.

Das obige ist der detaillierte Inhalt vonPHP-Praxis: Crawlen von Bilibili-Sperrdaten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn