PHP - varias variables con xpath query

 
Vista:
sin imagen de perfil
Val: 29
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

varias variables con xpath query

Publicado por Sergio (21 intervenciones) el 25/10/2017 16:27:53
Buenas tardes,

Disculpad, estoy intentando extraer datos de un site para aprender a hacerlo con php, y tengo una duda

Con este paso, saco el valor que hay en la ruta
1
2
$var1 = $datos_xpath->query('//a[@class="item-link "]');
$var2 = $datos_xpath->query('//span[@class="item-price"]');

Aqui debo recorrer esos valores, asignado el correspondiente var2 al var1.
1
2
3
4
5
6
foreach($var1 as $row1){
		echo $row1->nodeValue .",";
		foreach($var2 as $row2){
		    echo $row2->nodeValue . "<br />";
		}
	}

En python uso una función que practicamente me lo hace sola, llamada itertools, pero en php no le veo la forma, ¿aguien puede guiarme?

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

varias variables con xpath query

Publicado por kip (877 intervenciones) el 25/10/2017 18:34:50
Hola, exactamente que quieres hacer con el array de valores obtenido ? que funcion usabas del modulo itertools en Python ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 29
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

varias variables con xpath query

Publicado por Sergio (21 intervenciones) el 25/10/2017 20:00:07
Buenas tardes,

Quiero juntar cada uno de las querys para crear un insert en bbdd. En python lo hago tal que:

1
for (f, b, c, d) in itertools.izip(k, l, m, n):

Gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

varias variables con xpath query

Publicado por kip (877 intervenciones) el 25/10/2017 20:34:34
Basandome en lo que colocas de python, podrias intentar algo asi:

1
2
3
4
foreach (array_map(null, $var1, $var2) as $value) {
    list($v1, $v2) = $value;
    print_r($v1);
}

Si tienes un numero fijo de elementos del array de te servira list(), si no es asi deberas usar otro for, te lo digo porque tu linea de codigo en Python hace eso, hace un unpack pero sabiendo la cantidad de la elementos del iterable que envias a izip()....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 29
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

varias variables con xpath query

Publicado por Sergio (21 intervenciones) el 25/10/2017 21:07:38
Me devuelve una pantalla en balnco........ jolin, no debe ser tan complicao, digo yo......... y el for, si, lo he probao, y creo que lo controlo mal.....

Gracias de todos modos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

varias variables con xpath query

Publicado por kip (877 intervenciones) el 25/10/2017 22:05:14
Creo que no entiendes del todo como funciona el izip() de Python y como funciona el codigo que te coloque de PHP, este ejemplo espero te ayude:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$html = new DOMDocument();
$html->loadHTML('
<a class="item-link">valor de a1</a>
<a class="item-link">valor de a2</a>
<a class="item-link">valor de a3</a>
<span class="item-price">valor de span1</span>
<span class="item-price">valor de span2</span>
<span class="item-price">valor de span3</span>
');
 
$xpath = new DOMXpath($html);
 
$var1 = iterator_to_array($xpath->query('//a[@class="item-link"]'));
$var2 = iterator_to_array($xpath->query('//span[@class="item-price"]'));
 
foreach (array_map(null, $var1, $var2) as $value) {
    list($a, $span) = $value;
    echo "<{$a->nodeName}> ---- Clase: {$a->getAttribute('class')} ---- Valor: {$a->nodeValue}\n";
    echo "<{$span->nodeName}> ---- Clase: {$span->getAttribute('class')} ---- {$span->nodeValue}\n\n";
}

Tambien no me fije que lo que retorna el metodo query de la clase DOMXpath, es un NodeList que usa la interfaz Trasversable para que pueda ser iterada mediante foreach, asi que con iterator_to_array obtenemos un array y ya con eso podemos usar array_map....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 29
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

varias variables con xpath query

Publicado por Sergio (21 intervenciones) el 25/10/2017 23:11:18
PERFECTO¡

Me lo puedes explicar para entender como funciona y dar pistas para el futuro.....

Un Cordial Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar