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 相关文章推荐
如何去掉文章里的 html 语法
Oct 09 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
Dec 02 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
php中cookie的使用方法
Mar 29 PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 PHP
php实现图片局部打马赛克的方法
Feb 11 PHP
php数组转成json格式的方法
Mar 09 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
php实现页面纯静态的实例代码
Jun 21 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 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 神盾解密工具 ”
2014/06/20 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
Python实现基于权重的随机数2种方法
2015/04/28 Python
Python中取整的几种方法小结
2017/01/06 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
爱情保证书大全
2014/04/29 职场文书
教师工作总结范文2014
2014/11/10 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
Python实现对齐打印 format函数的用法
2022/04/28 Python