当前位置:首页 > PHP教程 > php高级应用 > 列表

PHPCrawl爬虫库实现抓取酷狗歌单的方法示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-08-23 22:21:49 浏览: 评论:0 

本文实例讲述了PHPCrawl爬虫库实现抓取酷狗歌单的方法,分享给大家供大家参考,具体如下:

本人看了网络爬虫相关的视频后,手痒痒,想爬点什么,最近Facebook上表情包大战很激烈,就想着把所有表情包都爬下来,却一时没有找到合适的VPN,因此把酷狗最近一月精选歌曲和简单介绍抓取到本地,代码写得有点乱,自己不是很满意,并不想放上来丢人现眼。不过转念一想,这好歹是自己第一次爬虫,于是...就有了如下不堪入目的代码~~~(由于抓取的数据量较小,所以没有考虑多进程什么的,不过我看了一下PHPCrawl的文档,发现PHPCrawl库已经把我能想到的功能都封装好了,实现起来很方便)

  1. <?php 
  2. header("Content-type:text/html;charset=utf-8"); 
  3. // It may take a whils to crawl a site ... 
  4. set_time_limit(10000); 
  5. include("libs/PHPCrawler.class.php"); 
  6. class MyCrawler extends PHPCrawler { 
  7.   function handleDocumentInfo($DocInfo) { 
  8.     // Just detect linebreak for output ("\n" in CLI-mode, otherwise "<br>"). 
  9.     if (PHP_SAPI == "cli"$lb = "\n"
  10.     else $lb = "<br />"
  11.     $url = $DocInfo->url; 
  12.     $pat = "/http:\/\/www\.kugou\.com\/yy\/special\/single\/\d+\.html/"
  13.     if(preg_match($pat,$url) > 0){ 
  14.     $this->parseSonglist($DocInfo); 
  15.     } 
  16.     flush(); 
  17.   } 
  18.   public function parseSonglist($DocInfo){ 
  19.     $content = $DocInfo->content; 
  20.     $songlistArr = array(); 
  21.     $songlistArr['raw_url'] = $DocInfo->url; 
  22.     //解析歌曲介绍 
  23.     $matches = array(); 
  24.     $pat = "/<span>名称:<\/span>([^(<br)]+)<br/"
  25.     $ret = preg_match($pat,$content,$matches); 
  26.     if($ret>0){ 
  27.       $songlistArr['title'] = $matches[1]; 
  28.     }else
  29.       $songlistArr['title'] = ''
  30.     } 
  31.     //解析歌曲 
  32.     $pat = "/<a title=\"([^\"]+)\" hidefocus=\"/"
  33.     $matches = array(); 
  34.     preg_match_all($pat,$content,$matches); 
  35.     $songlistArr['songs'] = array(); 
  36.     for($i = 0;$i < count($matches[0]);$i++){ 
  37.       $song_title = $matches[1][$i]; 
  38.       array_push($songlistArr['songs'],array('title'=>$song_title)); 
  39.     } 
  40.     echo "<pre>"
  41.     print_r($songlistArr); 
  42.     echo "</pre>"
  43.     } 
  44.   } 
  45. $crawler = new MyCrawler(); 
  46. // URL to crawl 
  47. $start_url="http://www.kugou.com/yy/special/index/1-0-2.html"
  48. $crawler->setURL($start_url); 
  49. // Only receive content of files with content-type "text/html" 
  50. $crawler->addContentTypeReceiveRule("#text/html#"); 
  51. //链接扩展 
  52. $crawler->addURLFollowRule("#http://www\.kugou\.com/yy/special/single/\d+\.html$# i"); 
  53. $crawler->addURLFollowRule("#http://www.kugou\.com/yy/special/index/\d+-\d+-2\.html$# i"); 
  54. // Store and send cookie-data like a browser does 
  55. $crawler->enableCookieHandling(true); 
  56. // Set the traffic-limit to 1 MB(1000 * 1024) (in bytes, 
  57. // for testing we dont want to "suck" the whole site) 
  58. //爬取大小无限制 
  59. $crawler->setTrafficLimit(0); 
  60. // Thats enough, now here we go 
  61. $crawler->go(); 
  62. // At the end, after the process is finished, we print a short 
  63. // report (see method getProcessReport() for more information) 
  64. $report = $crawler->getProcessReport(); 
  65. if (PHP_SAPI == "cli"$lb = "\n"
  66. else $lb = "<br />"
  67. echo "Summary:".$lb
  68. echo "Links followed: ".$report->links_followed.$lb
  69. echo "Documents received: ".$report->files_received.$lb
  70. echo "Bytes received: ".$report->bytes_received." bytes".$lb
  71. echo "Process runtime: ".$report->process_runtime." sec".$lb;  
  72. ?>

Tags: PHPCrawl爬虫库 PHP抓取酷狗歌单

分享到: