Rumah >pembangunan bahagian belakang >tutorial php >Amalan PHP: merangkak data benteng Bilibili

Amalan PHP: merangkak data benteng Bilibili

王林
王林asal
2023-06-13 19:08:342055semak imbas

Bilibili ialah tapak web video beramai-ramai yang popular di China. Ia juga merupakan harta karun, yang mengandungi semua jenis data. Antaranya, data benteng adalah sumber yang sangat berharga, begitu ramai penganalisis dan penyelidik data berharap untuk mendapatkan data ini. Dalam artikel ini, saya akan memperkenalkan penggunaan bahasa PHP untuk merangkak data benteng Bilibili.

  1. Persediaan

Sebelum mula merangkak data benteng, kita perlu memasang rangka kerja perangkak PHP Symphony 2. Ia boleh dipasang melalui arahan berikut:

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

Selepas itu, kita perlu menggunakan Composer untuk memasang perpustakaan bergantung GuzzleHttp dan PHP-DI:

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

Seterusnya, kita perlu mencari video yang sepadan nombor di laman web Bilibili Ia boleh diperolehi melalui alat pembangun F12.

  1. Data rentetan merangkak

Selepas mendapatkan nombor video Bilibili, kita boleh menggunakan GuzzleHttp untuk menghantar permintaan GET untuk mendapatkan data dan mendapatkan senarai rentetan dalam maklumat video tersebut. Berikut ialah kod untuk mendapatkan data:

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

Selepas berjaya mendapatkan maklumat senarai barraj, kami merangkumnya ke dalam tatasusunan:

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

Selepas kami berjaya mendapatkan data barrage, kami Ia boleh disimpan ke pangkalan data untuk analisis dan penggunaan seterusnya:

$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. Menganalisis data rentetan

Seterusnya, kita boleh mula menganalisis rentetan yang diperolehi Data dianalisis dan dibentangkan. Kita boleh menggunakan PHP dengan Highcharts, alat visualisasi data, untuk membina carta bilangan komen. Berikut ialah pelaksanaan data paparan dan kod:

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

Melalui artikel ini, kami telah berjaya menggunakan rangka kerja perangkak PHP Symphony 2 untuk merangkak fungsi data barrage Bilibili , menganalisis data yang diperoleh, dan menjana carta bilangan baraj. Dalam proses ini, kami mempelajari cara menggunakan PHP untuk menghantar permintaan GET untuk mendapatkan data rentetan video Bilibili, dan cara menggunakan Highcharts untuk memaparkan data.

Atas ialah kandungan terperinci Amalan PHP: merangkak data benteng Bilibili. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn