Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

252
Vistas
XPath no funciona como se esperaba [php]

A menudo uso XPath con php para analizar páginas, pero esta vez no entiendo el comportamiento con esta página específica con el siguiente código, espero que me puedan ayudar con esto.

Código que utilizo para analizar esta página http://www.jeuxvideo.com/recherche.php?m=9&t=10&q=Call+of+duty :

 <?php $What = 'Call of duty'; $What = urlencode($What); $Query = 'http://www.jeuxvideo.com/recherche.php?m=9&t=10&q='.$What; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $Query); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); $response = curl_exec($ch); curl_close($ch); /* $search = array("<article", "</article>"); $replace = array("<div", "</div>"); $response = str_replace($search, $replace, $response); */ $dom = new DOMDocument(); @$dom->loadHTML($response); $xpath = new DOMXPath($dom); $elements = $xpath->query('//article[@class="recherche-aphabetique-item"]/a'); //$elements = $xpath->query('//div[@class="recherche-aphabetique-item"]/a'); count($elements); var_dump($elements); ?>

violín para probarlo: http://phpfiddle.org/main/code/r9n6-d0j0

Solo quiero obtener todos los nodos "a" que están en los nodos "artículo" con la clase "recherche-aphabetique-item".

Pero no me devuelve nada :/.

Como puede ver en el código comentado, intenté reemplazar los artículos de elementos html5 a div, pero obtuve el mismo comportamiento.

Gracias cuatro por tu ayuda.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Estoy viendo un montón de DOMDocument::loadHTML(): Unexpected end tag debería usar las funciones internas de manejo de errores de libxml para ayudar a solucionar esto quizás. Además, cuando miré el DOM del sitio remoto, no pude ver a etiqueta que coincidiera con la consulta XPath, solo etiquetas span

 <?php $What = 'Call of duty'; $What = urlencode($What); $Query = 'http://www.jeuxvideo.com/recherche.php?m=9&t=10&q='.$What; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $Query); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); $response = curl_exec($ch); curl_close($ch); /* try to suppress errors using libxml */ libxml_use_internal_errors( true ); $dom = new DOMDocument(); /* additional flags for DOMDocument */ $dom->validateOnParse=false; $dom->standalone=true; $dom->strictErrorChecking=false; $dom->recover=true; $dom->formatOutput=false; @$dom->loadHTML($response); libxml_clear_errors(); $xpath = new DOMXPath($dom); $elements = $xpath->query('//article[@class="recherche-aphabetique-item"]/span'); count( $elements ); var_dump( $elements ); ?>

producción

 object(DOMNodeList)#97 (1) { ["length"]=> int(94) }

Podría simplificar aún más esto quizás intentando:

 $What = 'Call of duty'; $What = urlencode($What); $Query = 'http://www.jeuxvideo.com/recherche.php?m=9&t=10&q='.$What; libxml_use_internal_errors( true ); $dom = new DOMDocument(); $dom->validateOnParse=false; $dom->standalone=true; $dom->strictErrorChecking=false; $dom->recover=true; $dom->formatOutput=false; @$dom->loadHTMLFile($Query); libxml_clear_errors(); $xpath = new DOMXPath($dom); $elements = $xpath->query('//article[@class="recherche-aphabetique-item"]/span'); count($elements); foreach( $elements as $node )echo $node->nodeValue,'<br />';
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda