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文本转图片自动换行的方法
Mar 13 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
PHP中你应该知道的require()文件包含的正确用法
Jun 12 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 PHP
Laravel手动分页实现方法详解
Oct 09 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 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的FTP学习(一)[转自奥索]
2006/10/09 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
python中的列表与元组的使用
2019/08/08 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
在pycharm中实现删除bookmark
2020/02/14 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
python爬虫---requests库的用法详解
2020/09/28 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
旷课检讨书2000字
2014/01/14 职场文书
大学新生军训感言
2014/02/25 职场文书
2014年技术员工作总结
2014/11/18 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
PHP实现rar解压读取扩展包小结
2021/06/03 PHP