English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ejemplo de método de captura de listas de canciones de Kugou usando la biblioteca de crawlers PHPCrawl

Este artículo muestra cómo la biblioteca de rastreadores PHPCrawl realiza la captura de listas de reproducción de酷狗. Comparto con todos ustedes para que puedan referirse a ellos, como se muestra a continuación:

Después de ver videos relacionados con el rastreador web, tenía ansias y quería rastrear algo. Recientemente, la batalla de emoticonos en Facebook ha sido muy intensa, así que pensé en rastrear todos los emoticonos, pero no encontré un VPN adecuado, por lo que capturé las canciones seleccionadas recientemente de酷狗 y sus descripciones simples a la computadora local. El código está escrito un poco desordenado, no estoy muy satisfecho con él y no quiero publicarlo para avergonzarme. Sin embargo, después de considerar, al menos es mi primera vez rastreando, así que...se obtuvo el siguiente código desagradable para la vista~~~ (Debido a que la cantidad de datos capturados es pequeña, no se consideraron múltiples procesos, pero vi el documento de PHPCrawl y descubrí que la biblioteca PHPCrawl ya ha encapsulado todas las funciones que podía pensar, lo que facilita mucho su implementación)

<?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
      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->enlaces_seguidos.$lb;
echo "Documentos recibidos: ".$report->archivos_recibidos.$lb;
echo "Bytes recibidos: ".$report->bytes_recibidos." bytes".$lb;
echo "Tiempo de ejecución del proceso: ".$report->process_runtime." sec".$lb; 
?>

PS: Aquí les proporciono2Una herramienta muy conveniente de expresiones regulares para que todos la refieran y utilicen:

Herramienta de prueba en línea de expresiones regulares JavaScript:
http://tools.jb51.net/regex/javascript

Herramienta en línea de generación de expresiones regulares regulares:
http://tools.jb51.net/regex/create_reg

Más contenido relacionado con PHP que los lectores interesados pueden ver en la sección especial de este sitio: Resumen de uso de expresiones regulares php, Guía completa de técnicas de manipulación de arrays (Array) php, Tutorial de gramática básica de php, Resumen de uso de operadores y operadores php, Tutorial de diseño de programas orientados a objetos php, Resumen de técnicas de programación de red php, Resumen de uso de cadenas (string) php, php+Tutorial de operaciones básicas de bases de datos MySQL y Resumen de técnicas comunes de operaciones de bases de datos php

Espero que el contenido de este artículo pueda ayudar a todos a diseñar programas PHP.

Declaración: Este artículo se ha redactado en línea, el copyright pertenece al propietario original, el contenido se ha subido y compartido por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha procesado editorialmente ni se asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#w3Declaración: El contenido de este artículo se ha obtenido de la red, pertenece al propietario original, el contenido se ha contribuido y subido por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha realizado un procesamiento editorial manual ni se asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#w

Te gustará