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 相关文章推荐
php 删除cookie和浏览器重定向
Mar 16 PHP
PHPLog php 程序调试追踪工具
Sep 09 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 PHP
php实现rc4加密算法代码
Apr 25 PHP
php提示undefined index的几种解决方法
May 21 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
PHP实现的json类实例
Jul 28 PHP
php用户登录之cookie信息安全分析
May 13 PHP
Laravel validate error处理,ajax,json示例
Oct 25 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完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
学习ExtJS table布局
2009/10/08 Javascript
Javascript事件实例详解
2013/11/06 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
React Router基础使用
2017/01/17 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
django_orm查询性能优化方法
2018/08/20 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
详解python的变量缓存机制
2021/01/24 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
上课打牌的检讨书
2014/02/15 职场文书
鸿星尔克广告词
2014/03/21 职场文书
中学生操行评语
2014/04/24 职场文书
2014国庆节标语口号
2014/09/19 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
联谊会开场白
2015/06/01 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
Python可视化神器pyecharts绘制水球图
2022/07/07 Python
从原生JavaScript到React深入理解
2022/07/23 Javascript