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设计聊天室步步通
Oct 09 PHP
一个简单的自动发送邮件系统(三)
Oct 09 PHP
第四章 php数学运算
Dec 30 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
php遍历目录方法小结
Mar 10 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
php微信公众号开发(4)php实现自定义关键字回复
Dec 15 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自定文件保存session的方法
2014/12/10 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
python实时监控cpu小工具
2018/06/21 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Python partial函数原理及用法解析
2019/12/11 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
网络教育自我鉴定
2014/02/04 职场文书
开业庆典策划方案
2014/02/18 职场文书
会务接待方案
2014/02/27 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
学生会部长竞聘书
2014/03/31 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
2015年挂职干部工作总结
2015/05/14 职场文书
团委副书记工作总结
2015/08/14 职场文书