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


Posted in PHP onDecember 21, 2017

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

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

<?php
header("Content-type:text/html;charset=utf-8");
// It may take a whils to crawl a site ...
set_time_limit(10000);
include("libs/PHPCrawler.class.php");
class MyCrawler extends PHPCrawler {
  function handleDocumentInfo($DocInfo) {
    // Just detect linebreak for output ("\n" in CLI-mode, otherwise "<br>").
    if (PHP_SAPI == "cli") $lb = "\n";
    else $lb = "<br />";
    $url = $DocInfo->url;
    $pat = "/http:\/\/www\.kugou\.com\/yy\/special\/single\/\d+\.html/";
    if(preg_match($pat,$url) > 0){
    $this->parseSonglist($DocInfo);
    }
    flush();
  }
  public function parseSonglist($DocInfo){
    $content = $DocInfo->content;
    $songlistArr = array();
    $songlistArr['raw_url'] = $DocInfo->url;
    //解析歌曲介绍
    $matches = array();
    $pat = "/<span>名称:<\/span>([^(<br)]+)<br/";
    $ret = preg_match($pat,$content,$matches);
    if($ret>0){
      $songlistArr['title'] = $matches[1];
    }else{
      $songlistArr['title'] = '';
    }
    //解析歌曲
    $pat = "/<a title=\"([^\"]+)\" hidefocus=\"/";
    $matches = array();
    preg_match_all($pat,$content,$matches);
    $songlistArr['songs'] = array();
    for($i = 0;$i < count($matches[0]);$i++){
      $song_title = $matches[1][$i];
      array_push($songlistArr['songs'],array('title'=>$song_title));
    }
    echo "<pre>";
    print_r($songlistArr);
    echo "</pre>";
    }
  }
$crawler = new MyCrawler();
// URL to crawl
$start_url="http://www.kugou.com/yy/special/index/1-0-2.html";
$crawler->setURL($start_url);
// Only receive content of files with content-type "text/html"
$crawler->addContentTypeReceiveRule("#text/html#");
//链接扩展
$crawler->addURLFollowRule("#http://www\.kugou\.com/yy/special/single/\d+\.html$# i");
$crawler->addURLFollowRule("#http://www.kugou\.com/yy/special/index/\d+-\d+-2\.html$# i");
// Store and send cookie-data like a browser does
$crawler->enableCookieHandling(true);
// Set the traffic-limit to 1 MB(1000 * 1024) (in bytes,
// for testing we dont want to "suck" the whole site)
//爬取大小无限制
$crawler->setTrafficLimit(0);
// Thats enough, now here we go
$crawler->go();
// At the end, after the process is finished, we print a short
// report (see method getProcessReport() for more information)
$report = $crawler->getProcessReport();
if (PHP_SAPI == "cli") $lb = "\n";
else $lb = "<br />";
echo "Summary:".$lb;
echo "Links followed: ".$report->links_followed.$lb;
echo "Documents received: ".$report->files_received.$lb;
echo "Bytes received: ".$report->bytes_received." bytes".$lb;
echo "Process runtime: ".$report->process_runtime." sec".$lb; 
?>
PHP 相关文章推荐
文件上传的实现
Oct 09 PHP
php ss7.5的数据调用 (笔记)
Mar 08 PHP
php UBB 解析实现代码
Nov 27 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
PHP分页类集锦
Nov 18 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
php定时执行任务设置详解
Feb 06 PHP
codeigniter中view通过循环显示数组数据的方法
Mar 20 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
php桥接模式应用案例分析
Oct 23 PHP
PHP超全局变量实现原理及代码解析
Sep 01 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
Mar 04 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 #PHP
php获取微信共享收货地址的方法
Dec 21 #PHP
php实现socket推送技术的示例
Dec 20 #PHP
PHP实现模拟http请求的方法分析
Dec 20 #PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 #PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 #PHP
PHP实现的最大正向匹配算法示例
Dec 19 #PHP
You might like
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
接收键盘指令的脚本
2006/06/26 Javascript
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
Dojo 学习要点
2010/09/03 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
微信小程序 教程之WXML
2016/10/18 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
js模块加载方式浅析
2017/08/12 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
python实现三壶谜题的示例详解
2020/11/02 Python
python实现简单猜单词游戏
2020/12/24 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
行政专员工作职责
2013/12/22 职场文书
保护环境建议书100字
2014/05/13 职场文书
考试作弊检讨书
2014/10/21 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
Python 实现Mac 屏幕截图详解
2021/10/05 Python
PHP RabbitMQ消息列队
2022/05/11 PHP