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编程之高级技巧——利用Mysql函数
Oct 09 PHP
用PHP将网址字符串转换成超链接(网址或email)
May 25 PHP
浅析PHP的静态成员函数效率更高的原因
Jun 13 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
php绘图之在图片上写中文和英文的方法
Jan 24 PHP
PHP中预定义的6种接口介绍
May 12 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
PHP浮点比较大小的方法
Feb 14 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
php修改数组键名的方法示例
Apr 15 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 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
制作美丽的拉花
2021/03/03 冲泡冲煮
通过html表格发电子邮件
2006/10/09 PHP
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
javascript 关闭IE6、IE7
2009/06/01 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
Python中实现的RC4算法
2015/02/14 Python
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python中的高级函数map/reduce使用实例
2015/04/13 Python
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
Flask框架web开发之零基础入门
2018/12/10 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
毕业生求职简历中的自我评价
2013/10/18 职场文书
敬老月活动总结
2014/08/28 职场文书
面试自我评价范文
2014/09/17 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
团组织推荐意见
2015/06/05 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
MySQL数据库必备之条件查询语句
2021/10/15 MySQL
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记
Spring Boot实现文件上传下载
2022/08/14 Java/Android
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS