c语言编程笔录

首页 >   > 笔记大全

笔记大全

PHP 爬虫实战 爬取斗鱼直播数据

更新时间:2023-11-07

1. 项目需求

在进行 PHP 爬虫实战时,我们需要爬取一个斗鱼直播的数据(这里以斗鱼直播为例子),其分为以下几个步骤:


  $ch = curl_init();
  $url = 'https://www.douyu.com/g_LOL'; // 以英雄联盟分类为例,更换其他分类的链接即可。
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  $content = curl_exec($ch);
  curl_close($ch);
  

2. 解析HTML页面

获取到HTML页面的内容后,我们需要进行信息的提取和解析。这里我们可以使用 PHP 的 DOM 解析库 - DomDocument。


  $doc = new DomDocument();
  @$doc->loadHTML($content);
  
  // 获取列表内容
  $divs = $doc->getElementsByTagName('div');
  

3. 提取关键信息

在获取到HTML页面的内容并解析后,我们需要提取并整理需要的数据。例如斗鱼直播中主播的昵称、照片、观看人数等信息。


  $data = array();
  foreach($divs as $div){
      if($div->hasAttribute('class') && $div->getAttribute('class') == 'ListContent'){
          $img = $div->getElementsByTagName('img');
          $name = $div->getElementsByTagName('h2');
          $num = $div->getElementsByTagName('span');
          $url = $div->getElementsByTagName('a');
              
          $data[] = array(
              'photo' => $img->item(0)->getAttribute('data-original'),
              'name' => $name->item(0)->nodeValue,
              'url' => "https://www.douyu.com".$url->item(0)->getAttribute('href'),
              'num' => $num->item(0)->nodeValue
          );
      }
  }
  

4. 存储数据

最后,我们需要将获取到的数据存储到数据库中。这里我们可以使用 MySQL 数据库存储。


  $conn = mysqli_connect('localhost', 'root', '', 'test');
  foreach($data as $item){
      $photo = $item['photo'];
      $name = $item['name'];
      $url = $item['url'];
      $num = $item['num'];
      
      $sql = "insert into douyu(photo, name, url, num) values('$photo', '$name', '$url', '$num')";
      mysqli_query($conn, $sql);
  }
  mysqli_close($conn);