PHP 연습: Bilibili 사격 데이터 크롤링

王林
풀어 주다: 2023-06-13 19:10:01
원래의
2005명이 탐색했습니다.

Bilibili는 중국에서 인기 있는 사격 동영상 웹사이트이며, 모든 종류의 데이터를 담고 있는 보물창고이기도 합니다. 그중에서도 사격 데이터는 매우 귀중한 자원이기 때문에 많은 데이터 분석가와 연구자들이 이 데이터를 얻기를 희망하고 있습니다. 이 기사에서는 Bilibili 사격 데이터를 크롤링하기 위해 PHP 언어를 사용하는 방법을 소개합니다.

  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 웹사이트에서 해당 비디오 번호를 찾아야 합니다. 브라우저 F12 개발자 도구를 통해 수행됩니다.

  1. Crawling barrage data

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. Analytic of barrage data

다음으로, 획득한 사격 데이터를 분석하고 표시할 수 있습니다. 데이터 시각화 도구인 Highcharts와 함께 PHP를 사용하여 댓글 수에 대한 차트를 작성할 수 있습니다. 다음은 표시 데이터 및 코드 구현입니다.

$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 사격 데이터를 크롤링하는 기능을 구현하고 얻은 데이터를 분석했습니다. 포격 횟수 차트가 생성되었습니다. 이 과정에서 우리는 Bilibili 비디오 사격 데이터를 얻기 위해 PHP를 사용하여 GET 요청을 보내는 방법과 Highcharts를 사용하여 데이터를 표시하는 방법을 배웠습니다.

위 내용은 PHP 연습: Bilibili 사격 데이터 크롤링의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿