Foros del Web » Programando para Internet » PHP »

xpath no devuelve elementos

Estas en el tema de xpath no devuelve elementos en el foro de PHP en Foros del Web. Hola a todos. Estoy creando una web para una práctica de la universidad, en la cual saco información de varias webs para después integrarlas entre ...
  #1 (permalink)  
Antiguo 13/08/2019, 14:12
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
xpath no devuelve elementos

Hola a todos. Estoy creando una web para una práctica de la universidad, en la cual saco información de varias webs para después integrarlas entre si.
El caso es que de una de las páginas que saco la información, tengo que sacar los resultados que hay en una estructura similar a esta:
Código PHP:
div class="main-content">
    <
div class="post">
        <
a href="http://miweb1/resultado1.php">
            <
img alt=""
                 
class="attachment-post-thumbnail size-post-thumbnail wp-post-image"
                 
sizes="(max-width: 150px) 100vw, 150px"
                 
src="http://miweb1/resultado1.jpg">
        </
a>
        <
div class="bottom-block">
            
Resultado 1
        
</div>
        <
div class="date-block">
            
10/02/2018
        
</div>
    </
div>
    <
div class="post">
        <
a href="http://miweb1/resultado2.php">
            <
img alt=""
                 
class="attachment-post-thumbnail size-post-thumbnail wp-post-image"
                 
sizes="(max-width: 150px) 100vw, 150px"
                 
src="http://miweb1/resultado2.jpg">
        </
a>
        <
div class="bottom-block">
            
Resultado 2
        
</div>
        <
div class="date-block">
            
13/02/2018
        
</div>
    </
div>
    <
div class="post">
        <
a href="http://miweb1/resultado3.php">
            <
img alt=""
                 
class="attachment-post-thumbnail size-post-thumbnail wp-post-image"
                 
sizes="(max-width: 150px) 100vw, 150px"
                 
src="http://miweb1/resultado3.jpg">
        </
a>
        <
div class="bottom-block">
            
Resultado 3
        
</div>
        <
div class="date-block">
            
12/02/2018
        
</div>
    </
div>
    <
div class="post">
        <
a href="http://miweb1/resultado4.php">
            <
img alt=""
                 
class="attachment-post-thumbnail size-post-thumbnail wp-post-image"
                 
sizes="(max-width: 150px) 100vw, 150px"
                 
src="http://miweb1/resultado4.jpg">
        </
a>
        <
div class="bottom-block">
            
Resultado 4
        
</div>
        <
div class="date-block">
            
15/02/2018
        
</div>
    </
div>
</
div
Intento sacar el resultado con XPATH con la siguiente función:
Código PHP:
<?php

function get_results_l1($keyword)
    {

        
$url "http://miweb1/?="$keyword);

        
$doc = new DOMDocument();

        
/*
         * Debido a que loadHTMLFile no admite algunas etiquetas de HTML5, generando un warning, eliminamos mensaje
         * de error en la siguiente linea con la @
         * */

        
@$doc->loadHTML(file_get_contents($url));

        
$div_results = new DOMXPath($doc);
        
        
$elements $div_results->query("//div[@class='post-resultado']");

        echo 
"<br>Vardump de elements es:<br>";
        
var_dump($elements);
        echo 
"<br><br>";
        
$l1_links = array();
        
$i 0;

        foreach (
$elements as $element) {
            echo 
"<br>$element actual $i es: <br>";
            
var_dump($element);
            echo 
"<br><br>";
            
$enlaces $element->getElementsByTagName("a");
            foreach (
$enlaces as $enlace) {
                
$l1_links[$i] = $enlace->getAttribute("href");
                echo 
$i."-".$l1_links[$i]."<br>";
                
$i++;
            }
        }
        echo 
"<br>Fin foreach<br>";

        return 
$l1_links;
    }
Y el resultao que obtengo es el siguiente:
Código HTML:
Vardump de elements es:
object(DOMNodeList)#15 (1) { ["length"]=> int(0) } 


Inicio el foreach


Fin foreach
Si no estoy equivocado con la query //div[@class='post-resultado'] deberia obtener 4 nodos, uno por cada resultado que hay en la web.
Sin embargo parece que no devuelve nada...
He comprobado la expresion en un XPATH TESTER ONLINE y si me devuelve los 4 elementos... pero sin embargo en mi web no devuelve nada...
Alguien podria orientarme un poco porque no me está devolviendo nada?
Saludos y gracias a todos!
__________________
Tecnología y tutoriales
  #2 (permalink)  
Antiguo 13/08/2019, 15:47
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: xpath no devuelve elementos

Cita:
Iniciado por dryant Ver Mensaje
Hola a todos. Estoy creando una web para una práctica de la universidad, en la cual saco información de varias webs para después integrarlas entre si.
El caso es que de una de las páginas que saco la información, tengo que sacar los resultados que hay en una estructura similar a esta:
Código PHP:
div class="main-content">
    <
div class="post">
        <
a href="http://miweb1/resultado1.php">
            <
img alt=""
                 
class="attachment-post-thumbnail size-post-thumbnail wp-post-image"
                 
sizes="(max-width: 150px) 100vw, 150px"
                 
src="http://miweb1/resultado1.jpg">
        </
a>
        <
div class="bottom-block">
            
Resultado 1
        
</div>
        <
div class="date-block">
            
10/02/2018
        
</div>
    </
div>
    <
div class="post">
        <
a href="http://miweb1/resultado2.php">
            <
img alt=""
                 
class="attachment-post-thumbnail size-post-thumbnail wp-post-image"
                 
sizes="(max-width: 150px) 100vw, 150px"
                 
src="http://miweb1/resultado2.jpg">
        </
a>
        <
div class="bottom-block">
            
Resultado 2
        
</div>
        <
div class="date-block">
            
13/02/2018
        
</div>
    </
div>
    <
div class="post">
        <
a href="http://miweb1/resultado3.php">
            <
img alt=""
                 
class="attachment-post-thumbnail size-post-thumbnail wp-post-image"
                 
sizes="(max-width: 150px) 100vw, 150px"
                 
src="http://miweb1/resultado3.jpg">
        </
a>
        <
div class="bottom-block">
            
Resultado 3
        
</div>
        <
div class="date-block">
            
12/02/2018
        
</div>
    </
div>
    <
div class="post">
        <
a href="http://miweb1/resultado4.php">
            <
img alt=""
                 
class="attachment-post-thumbnail size-post-thumbnail wp-post-image"
                 
sizes="(max-width: 150px) 100vw, 150px"
                 
src="http://miweb1/resultado4.jpg">
        </
a>
        <
div class="bottom-block">
            
Resultado 4
        
</div>
        <
div class="date-block">
            
15/02/2018
        
</div>
    </
div>
</
div
Intento sacar el resultado con XPATH con la siguiente función:
Código PHP:
<?php

function get_results_l1($keyword)
    {

        
$url "http://miweb1/?="$keyword);

        
$doc = new DOMDocument();

        
/*
         * Debido a que loadHTMLFile no admite algunas etiquetas de HTML5, generando un warning, eliminamos mensaje
         * de error en la siguiente linea con la @
         * */

        
@$doc->loadHTML(file_get_contents($url));

        
$div_results = new DOMXPath($doc);
        
        
$elements $div_results->query("//div[@class='post-resultado']");

        echo 
"<br>Vardump de elements es:<br>";
        
var_dump($elements);
        echo 
"<br><br>";
        
$l1_links = array();
        
$i 0;

        foreach (
$elements as $element) {
            echo 
"<br>$element actual $i es: <br>";
            
var_dump($element);
            echo 
"<br><br>";
            
$enlaces $element->getElementsByTagName("a");
            foreach (
$enlaces as $enlace) {
                
$l1_links[$i] = $enlace->getAttribute("href");
                echo 
$i."-".$l1_links[$i]."<br>";
                
$i++;
            }
        }
        echo 
"<br>Fin foreach<br>";

        return 
$l1_links;
    }
Y el resultao que obtengo es el siguiente:
Código HTML:
Vardump de elements es:
object(DOMNodeList)#15 (1) { ["length"]=> int(0) } 


Inicio el foreach


Fin foreach
Si no estoy equivocado con la query //div[@class='post-resultado'] deberia obtener 4 nodos, uno por cada resultado que hay en la web.
Sin embargo parece que no devuelve nada...
He comprobado la expresion en un XPATH TESTER ONLINE y si me devuelve los 4 elementos... pero sin embargo en mi web no devuelve nada...
Alguien podria orientarme un poco porque no me está devolviendo nada?
Saludos y gracias a todos!
no te muestra por que lo estas viendo desde el navegador y el navegador esta interpretando la devolucion como HTML , ponle mirar "codigo FUENTE de la pagina" boton derecho sobre la pagna , y mira recien, el resultado
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #3 (permalink)  
Antiguo 13/08/2019, 16:54
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: xpath no devuelve elementos

Cita:
Iniciado por tuadmin Ver Mensaje
no te muestra por que lo estas viendo desde el navegador y el navegador esta interpretando la devolucion como HTML , ponle mirar "codigo FUENTE de la pagina" boton derecho sobre la pagna , y mira recien, el resultado
Gracias por la respuesta, pero no es así.
En el codigo fuente tampoco aparece nada. Ademas el DOMNODELIST me muestra que tiene un length de 0
__________________
Tecnología y tutoriales
  #4 (permalink)  
Antiguo 13/08/2019, 19:02
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: xpath no devuelve elementos

Cita:
Iniciado por dryant Ver Mensaje
Gracias por la respuesta, pero no es así.
En el codigo fuente tampoco aparece nada. Ademas el DOMNODELIST me muestra que tiene un length de 0
ufa perdona lo veia desde el movil, ejeje pero bueno quita el @ que tienes, y solo lo pones cuando ya veas que esta para produccion, pero para desarrollar necesitas saber hasta el minimo error, en todo caso vi que tu problema esta en esta parte

Código PHP:
$div_results->query("//div[@class='post-resultado']"); 
ya que en tu ejemplo XML no existe ningun DIV con el atributo class="post-resultado", pero si hay con div con "post"


Código PHP:
$div_results->query("//div[@class='post']"); 
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #5 (permalink)  
Antiguo 14/08/2019, 11:10
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: xpath no devuelve elementos

Cita:
Iniciado por tuadmin Ver Mensaje
ufa perdona lo veia desde el movil, ejeje pero bueno quita el @ que tienes, y solo lo pones cuando ya veas que esta para produccion, pero para desarrollar necesitas saber hasta el minimo error, en todo caso vi que tu problema esta en esta parte

Código PHP:
$div_results->query("//div[@class='post-resultado']"); 
ya que en tu ejemplo XML no existe ningun DIV con el atributo class="post-resultado", pero si hay con div con "post"


Código PHP:
$div_results->query("//div[@class='post']"); 
Gracias de nuevo, pero sigue sin ser eso... Lo de imagen-post ha sido una errata al copiar el codigo aqui.

He descubierto algo mas, por lo visto el problema radica en que no carga el html de la pagina en cuestion, supongo que por algn tipo de proteccion o algo similar.

Para comprobarlo, he simplificado al maximo y he ido poniendo var_dumps a cada paso.

He hecho un simple:
Código PHP:
$html file_get_contents($url);
$html var_dump($html); 
y solo con eso se queda mi página recargando indefinidamente, como si estuviera pulsando refrescar continuamente, sin llegar a mostrar nada....
Y en la pestaña del titulo, pone "You're being redirected"
Es como si detectara que estoy intentando conectarme desde una aplicacion web, y me redirigiera por ese motivo, ya que si entro a traves del navegador a la misma URL se ve todo perfectamente....

Alguna idea de como solucionarlo?
__________________
Tecnología y tutoriales
  #6 (permalink)  
Antiguo 15/08/2019, 03:45
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: xpath no devuelve elementos

Ok. Ya se lo que pasa... aunque no sé como solucionarlo todavía...
La web de la que sacaba información ha cambiado de dominio, y está haciendo una redireccion ¿301? creo...
Ahi es donde filegetcontents, se queda redirigiendo infinitamente....
Estoy mirando las opciones del File_get_contents referente al contexto.
He probado ya con follow_location = 1 y nada...
Sigo probando....

Alguna idea....?
__________________
Tecnología y tutoriales

Etiquetas: devuelve, elementos, html, query, url, xpath
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 15:28.