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程序
Oct 09 PHP
我的论坛源代码(九)
Oct 09 PHP
E路文章系统PHP
Dec 11 PHP
php 生成WML页面方法详解
Aug 09 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 PHP
WordPress中获取所使用的模板的页面ID的简单方法
Dec 31 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
浅析PHP数据导出知识点
Feb 17 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 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/03/29 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
js变量提升深入理解
2016/09/16 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
webpack 1.x升级过程中的踩坑总结大全
2017/08/09 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
js的Object.assign用法示例分析
2020/03/05 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
Python随机读取文件实现实例
2017/05/25 Python
Python 多线程的实例详解
2017/09/07 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
Python新手学习标准库模块命名
2020/05/29 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
教育专业自荐书范文
2013/12/17 职场文书
《画》教学反思
2014/04/14 职场文书
工厂搬迁方案
2014/05/11 职场文书
排查整治工作方案
2014/06/09 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书