PHP - Hacer web scraping de precios en amazon

 
Vista:

Hacer web scraping de precios en amazon

Publicado por Oliver (2 intervenciones) el 02/04/2019 17:14:58
Hola a todos. Soy diseñador web, y en estos ultimos 6 meses vengo aprendiendo PHP. Estoy haciendo una web en la que hay unos 15 o 20 artículos por pagina, y quiero que los precios se actualicen desde amazon automaticamente.

Hice un script en PHP, el cual me funciona, pero no se si consumirá muchos recursos a la hora de hacer el scrapeo de precios. Estoy trabajando en servidor local(WAMP) y a la hora de cargar la pagina, me tarda en torno al minuto y medio en cargar correctacmente.

Supongo que será cosa de mi conexion a internet(que es muy mala), y que por eso tarda tanto.

Pero ademas de eso me gustaría saber si esto le supone una carga a amazon y me podrian bloquear la ip por exceso de peticiones.

El script es el siguiente:

<?php
$url = 'https://www.amazon.es/Honor-Lite-Smartphone-Protective-Exclusivo/dp/B07MBB6T1K';
$html = file_get_contents($url);

preg_match_all('/span id="priceblock_dealprice" class="a-size-medium a-color-price priceBlockDealPriceString(.*?)<\/span>/', $html, $matches);

print_r(implode($matches[0]));

?>
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 santi
Val: 588
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Hacer web scraping de precios en amazon

Publicado por santi (204 intervenciones) el 02/04/2019 22:56:26
Hola,

yo hice un script como este y te recomiendo 2 cosas:

1.- Que utilices simple html dom parser para acceder a los datos. Aquí la web -> http://simplehtmldom.sourceforge.net/

2.- Que en vez de file_get_contents utilices curl -> https://www.php.net/manual/es/curl.examples-basic.php

A parte des esto, sobre lo que comentas, es posible que si haces muchas peticiones, al final te bloqueen la ip, pero tampoco creo que les venga de aquí... jejeje

O podrías mirar si existe alguna api para lo que necesitas que creo que sí..

Ya nos comentas ;)
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

Hacer web scraping de precios en amazon

Publicado por Oliver (2 intervenciones) el 03/04/2019 12:30:21
Hola santi, y gracias por tu respuesta.

Cuando dices que utilize simple html dom parser, lo dices porque realiza la consulta más rápido? O por qué motivo?,

Sí que existe una API de Amazon, pero funciona muy mal. Por eso mi intención era que sólo actualizar los precios ya que los artículos siempre van a ser los mismos.

Gracias por tu respuesta
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: 27
Ha aumentado su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Hacer web scraping de precios en amazon

Publicado por davea (13 intervenciones) el 25/04/2019 15:51:08
Que tal tambien soy nuevo en esto del scraping tenia una dua estoy utilizando dom para php pero no utilizo cUrl ya que extraigo datos da tablas uno por uno ahora mismo estoy en un proyecto de raspado de paginas de una pagina de ventas mi duda es que aun no puedo almacenar datos en una base de datos tengo problemas con eso: te puedo pasar mi codigo para q lo veas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<?php
 
 
require 'simple_html_dom.php';
$k=0;
do{
 
$url = 'https://www.infocasas.com.bo/venta/casas/santa-cruz'.$k;
 
$k++;
 
	$html = file_get_html($url);
 
	$posts = $html->find('div[class=propiedades-slider]');
 
	foreach ($posts as $post ){
 
 
	$link = $post->find('div a', 0);
	$url = $link->attr['href'];
	$title = $link->innertext;
 
	#echo $url,"\n";
	#echo "<br>";
 
 
 
$url = 'https://www.infocasas.com.bo/'.$url;
 
$html = file_get_html($url);
 
$posts = $html->find('div[id=contenedor]');
 
 
foreach ($posts as $post){
 
	$titulo = $post->find('div[class=h1h] h1', 0);
	$ficha = $post->find('div[class=ficha-tecnica] h2', 0);
 
 
 
	$p = $post->find('div[class=lista] p', 0);
	$div = $post->find('div[class=lista] div', 0);
	$p1 = $post->find('div[class=lista] p', 1);
	$div1 = $post->find('div[class=lista] div', 1);
	$p2 = $post->find('div[class=lista] p', 2);
	$div2 = $post->find('div[class=lista] div', 2);
	$p3 = $post->find('div[class=lista] p', 3);
	$div3 = $post->find('div[class=lista] div', 3);
	$p4 = $post->find('div[class=lista] p', 4);
	$div4 = $post->find('div[class=lista] div', 4);
	$p5 = $post->find('div[class=lista] p', 5);
	$div5 = $post->find('div[class=lista] div', 5);
	$p6 = $post->find('div[class=lista] p', 6);
	$div6 = $post->find('div[class=lista] div', 6);
	$p7 = $post->find('div[class=lista] p', 7);
	$div7 = $post->find('div[class=lista] div', 7);
	$p8 = $post->find('div[class=lista] p', 8);
	$div8 = $post->find('div[class=lista] div', 8);
	$p9 = $post->find('div[class=lista] p', 9);
	$div9 = $post->find('div[class=lista] div', 9);
	$p10 = $post->find('div[class=lista] p', 10);
	$div10 = $post->find('div[class=lista] div', 10);
	$p11 = $post->find('div[class=lista] p', 11);
	$div11 = $post->find('div[class=lista] div', 11);
	$p12 = $post->find('div[class=lista] p', 12);
	$div12 = $post->find('div[class=lista] div', 12);
	$p13 = $post->find('div[class=lista] p', 13);
	$div13 = $post->find('div[class=lista] div', 13);
	$p14 = $post->find('div[class=lista] p', 14);
	$div14 = $post->find('div[class=lista] div', 14);
	$p15 = $post->find('div[class=lista] p', 15);
	$div15 = $post->find('div[class=lista] div', 15);
	$p16 = $post->find('div[class=lista] p', 16);
	$div16 = $post->find('div[class=lista] div', 16);
	$p17 = $post->find('div[class=lista] p', 17);
	$div17 = $post->find('div[class=lista] div', 17);
	$p18 = $post->find('div[class=lista] p', 18);
	$div18 = $post->find('div[class=lista] div', 18);
	$p19 = $post->find('div[class=lista] p', 19);
	$div19 = $post->find('div[class=lista] div', 19);
 
 
	$telefono = $post->find('div[class=centerHolder] div', 0);
 
 
	$link = $post->find('div img', 0);
	$img = $link->attr['src'];
	$link = $post->find('div img', 1);
	$img1 = $link->attr['src'];
	$link = $post->find('div img', 2);
	$img2 = $link->attr['src'];
	$link = $post->find('div img', 3);
	$img3 = $link->attr['src'];
	$link = $post->find('div img', 4);
	$img4 = $link->attr['src'];
 
 
	echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";
	echo "<br>","<br>";
	echo $titulo,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $ficha,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p,"\n",$div,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p1,"\n",$div1,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p2,"\n",$div2,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p3,"\n",$div3,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p4,"\n",$div4,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p5,"\n",$div5,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p6,"\n",$div6,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p7,"\n",$div7,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p8,"\n",$div8,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p9,"\n",$div9,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p10,"\n",$div10,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p11,"\n",$div11,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p12,"\n",$div12,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p13,"\n",$div13,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p14,"\n",$div14,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p15,"\n",$div15,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p16,"\n",$div16,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p17,"\n",$div17,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p18,"\n",$div18,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $p19,"\n",$div19,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo $telefono,"\n";
	echo "<br>","<br>";
	echo "===========================================================";
	echo "<br>","<br>";
	echo $img,"\n";
	echo "<br>","<br>";
	echo $img1,"\n";
	echo "<br>","<br>";
	echo $img2,"\n";
	echo "<br>","<br>";
	echo $img3,"\n";
	echo "<br>","<br>";
	echo $img4,"\n";
	echo "<br>","<br>";
	#echo $info,"\n";
	echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";
 
}
 
}
}while($posts>0);

Este es el codigo que estoy utilizando me funciona los datos q estoy sacando y almacenando en div, div1...o p, p1 estan asi por las posiciones de las tablas q no siempre son exactos y varian de acuerdo a la informacion, seria de mucha ayuda una guia de como podria hacer para poder almacenar los datos extraidos gracias...
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