Foros del Web » Programando para Internet » PHP »

Extraer <title> con DOM en PHP

Estas en el tema de Extraer <title> con DOM en PHP en el foro de PHP en Foros del Web. Hola compañeros de FDW!! Busqué por Google y distintos sitios como extraer el titulo de una página, pero no encontré lo que buscaba. Estoy extrayendo ...
  #1 (permalink)  
Antiguo 11/09/2012, 20:50
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 8 meses
Puntos: 29
Busqueda Extraer <title> con DOM en PHP

Hola compañeros de FDW!!

Busqué por Google y distintos sitios como extraer el titulo de una página, pero no encontré lo que buscaba.

Estoy extrayendo todos los enlaces de un sitio web, pero quiero obtener ahora todos los titulos de cada una de las páginas.

La sección de código que utilizo es la siguiente:

Código PHP:
Ver original
  1. [...]
  2. $dom = new DOMDocument();
  3. @$dom->loadHTML($html);
  4.  
  5. for ($i = 0; $i < $hrefs->length; $i++) {
  6.     $href = $hrefs->item($i);
  7.     $url = $href->getAttribute('href');
  8. [...]

Con Curl descargo la página y luego con DOM, obtengo los links, el código que uso actualmente para extraer el titulo es el siguiente:

Código PHP:
Ver original
  1. preg_match_all ("(<title>(.*)</title>)siU", $html, $title);
Pero esto no funciona, ya que solo extrae el titulo de la página inicial. ¿Cómo puedo lograr que se extraiga el titulo de cada link?

Muchas gracias a todos!
  #2 (permalink)  
Antiguo 12/09/2012, 06:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Extraer <title> con DOM en PHP

La tecnica que usas lee la pagina que has cargado, luego puede leer los links que esta contenga, el title de las pagina enlazadas esta en la pagina no en la actual ... luego deberías cargar cada una de las paginas....

O cambiar de estrategia y usar getAttribute('title') si las etiquetas <a.... title="si el titulo que quieres leer esta aqui"> tienen ese atributo o usar una expresion regular para leer el innerHTML de la etiqueta del link

<a href="...">si el titulo que quieres leer esta aqui</a>
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 12/09/2012, 11:37
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 8 meses
Puntos: 29
Respuesta: Extraer <title> con DOM en PHP

Gracias por la respuesta quimfv. Yo lo que intento es extraer el titulo de cada página (<title></title>). Osea de todos los links que extrae quiero poder obtener el titulo de cada uno osea lo que se encuentra dentro de <title>****</title>.

Con preg_match_all solo puedo extraer el de la primera página, pero no el titulo de las demás.
  #4 (permalink)  
Antiguo 12/09/2012, 11:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Extraer <title> con DOM en PHP

1. Sólo estás cargando el DOM de una sola pagina
2. Las demás paginas no se cargan por arte de magia
3. Necesitas tu cargar pagina por pagina para extraer el titulo
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 12/09/2012, 12:02
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 8 meses
Puntos: 29
Respuesta: Extraer <title> con DOM en PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
1. Sólo estás cargando el DOM de una sola pagina
2. Las demás paginas no se cargan por arte de magia
3. Necesitas tu cargar pagina por pagina para extraer el titulo
jajaj me parecía que me estaba olvidando de algo.

¿Para cargar las otras páginas se haría de la siguiente manera?:

$dom = new DOMDocument();
@$dom->loadHTML($url);

Luego vuelvo a extraer enlaces, que podría guardarlos en un archivo, y extraigo los titulos de cada una.

edit: Acabo de probar con preg_match_all ('/<title>(.*)<\/title>/',file_get_contents($url), $title); pero no me extrae el titulo sino que imprime el sig texto: "Array".

EDITO: Perdón, no añadí parte del código cuando copie, el código original es este:

Código PHP:
Ver original
  1. $ch = curl_init();
  2.  
  3.  
  4. $html= curl_exec($ch);
  5. if (!$html) {
  6.     echo "<br />cURL error number:" .curl_errno($ch);
  7.     echo "<br />cURL error:" . curl_error($ch);
  8.     exit;
  9. }
  10.  
  11. $dom = new DOMDocument();
  12. @$dom->loadHTML($html);
  13.  
  14. $xpath = new DOMXPath($dom);
  15. $hrefs = $xpath->evaluate("/html/body//a");
  16.  
  17. for ($i = 0; $i < $hrefs->length; $i++) {
  18.     $href = $hrefs->item($i);
  19.     $url = $href->getAttribute('href');
  20. preg_match_all ("(<title>(.*)</title>)siU", $html, $title);
  21. [...]

Última edición por xarmagedonx; 12/09/2012 a las 15:56
  #6 (permalink)  
Antiguo 16/09/2012, 11:45
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 8 meses
Puntos: 29
Respuesta: Extraer <title> con DOM en PHP

Hola de nuevo, estube provando de distintas maneras, pero no conseguí hacer el bucle necesario para que se repita la acción de descargar la página web y extraer su titulo.

Alguien tiene idea de como lograrlo??, no les pido el código, sino algún ejemplo o concepto de como poder desarrollarlo.

Saludos!
  #7 (permalink)  
Antiguo 17/09/2012, 01:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Extraer <title> con DOM en PHP

Primero cargas el fichero, al mismo tiempo que lees los hrf creas un array con ellos, el bucle tiene que recorrer ese array he ir cargando los ficheros como en el primer caso....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: dom, html, title
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:39.