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 相关文章推荐
一个改进的UBB类
Oct 09 PHP
phpfans留言版用到的install.php
Jan 04 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
php 随机排序广告的实现代码
May 09 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
教你在header中隐藏php的版本信息
Aug 10 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
php实现根据身份证获取精准年龄
Feb 26 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的FTP学习(一)[转自奥索]
2006/10/09 PHP
聊天室php&amp;mysql(四)
2006/10/09 PHP
md5 16位二进制与32位字符串相互转换示例
2013/12/30 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
浅谈Python 对象内存占用
2016/07/15 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
python实现图像全景拼接
2020/03/27 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
飞利浦美国官网:Philips美国
2020/02/28 全球购物
C#面试问题
2016/07/29 面试题
业务内勤岗位职责
2014/04/30 职场文书
消防志愿者活动方案
2014/08/23 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫