Ayuda con Web Scrapper Simple Html Dom

  • Autor Autor igorayeb
  • Fecha de inicio Fecha de inicio
I

igorayeb

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Estimad@s, les pido ayuda nuevamente porque me he topado con un problema usando simple_html_dom.no puedo obtener los datos de esta web

HTML:
<div class="logo tc oculto-md-down" id="estadoOperacionalBlock" onclick="document.getElementById('estadoOpMsg').style.display = (document.getElementById('estadoOpMsg').style.display=='block' ? 'none' : 'block')">
													<div id="estadoOperacional">
		<img style="width:116px; height:34px;" alt="Aguas Andinas ®" src="https://www.aguasandinas.cl/aguascontema-theme/images/estado-operacional/01-azul-gotas-todas-invento.png">
	</div>
			
	<div id="estadoOperacionalTooltip" style="background: white; border: 0px; border-image: none; left: 1025px; top: 61px; width: 237px; margin-right: 0px; position: absolute; z-index: 1984; box-shadow: 10px 10px 5px rgba(1,1,1,0.239);">
				<div style="background:white;color:#105aff;border:5px solid white;">
	       	<div style="text-transform:uppercase;font-size:1.329em;font-weight:900;margin-left:23px;color:#606060">ESTADOS OPERACIONALES</div>
		</div>
							<div style="background: #FFF;color: #606060;border: 5px solid #0059B2;">
        <div style="text-transform:uppercase;font-size:1.2em;font-weight:600;margin:10px 0px 0px 10px;">Normalidad</div>
        <div style="font-size:1.2em;font-weight:600;margin:5px 0px 0px 10px;padding-bottom:13px;">Operacion normal de la compañía.</div>
	</div>
									<div style="background: #FFF;color: #bebebe;border: 5px solid $FFF;">
        <div style="text-transform:uppercase;font-size:1.2em;font-weight:600;margin:10px 0px 0px 10px;">Alerta Verde</div>
        <div style="font-size:1.2em;font-weight:600;margin:5px 0px 0px 10px;padding-bottom:13px;">Vigilancia ante el pronóstico de un evento desfavorable.</div>
	</div>
									<div style="background: #FFF;color: #bebebe;border: 5px solid $FFF;">
        <div style="text-transform:uppercase;font-size:1.2em;font-weight:600;margin:10px 0px 0px 10px;">Alerta Temprana Preventiva</div>
        <div style="font-size:1.2em;font-weight:600;margin:5px 0px 0px 10px;padding-bottom:13px;">Se materializa el evento y se toman acciones preventivas.</div>
	</div>
									<div style="background: #FFF;color: #bebebe;border: 5px solid $FFF;">
        <div style="text-transform:uppercase;font-size:1.2em;font-weight:600;margin:10px 0px 0px 10px;">Alerta Amarilla</div>
        <div style="font-size:1.2em;font-weight:600;margin:5px 0px 0px 10px;padding-bottom:13px;">El evento afecta la operación de la compañía, pero al momento, no afecta a los clientes o está en proceso de recuperación.</div>
	</div>
									<div style="background: #FFF;color: #bebebe;border: 5px solid $FFF;">
        <div style="text-transform:uppercase;font-size:1.2em;font-weight:600;margin:10px 0px 0px 10px;">Alerta Roja</div>
        <div style="font-size:1.2em;font-weight:600;margin:5px 0px 0px 10px;padding-bottom:13px;">El evento produce afectación masiva de clientes y requiere movilizar todos los recursos de la compañía.</div>
	</div>
				</div>
</div>


https://www.aguasandinas.cl/web/aguasandinas

Lo que necesito es buscar el div activo, que al parecer es el que tiene un style:color: #606060;border: 5px solid #0059B2; y me muestre las palabras del siguiente div

Agradezco su ayuda
 
Última edición:
Si lo haces con explode, algo así
PHP:
$data = explode('<div style="background: #FFF;color: #606060;border: 5px solid #0059B2;">', $html);
$data = explode('</div>',$data[1]);
echo $data[0];
Es una idea :ambivalence:
 
Por qué no trabajas con clases en vez que estar colocando los estilos a cada div? Sería bueno y podrás manipular mucho mejor cada elemento.

Enviado desde mi SM-J105B mediante Tapatalk
 
Gracias por sus aportes, pero no me da ningún resultado.
Por último extraer el SRC de:
HTML:
<div id="estadoOperacional">
<img style="width:116px; height:34px;" alt="Aguas Andinas ®" src="https://www.aguasandinas.cl/aguascontema-theme/images/estado-operacional/01-azul-gotas-todas-invento.png">
</div>
Y si es "azul" que haga algo...
 
Asumiendo que tienes almacenado todo el string del código html en tu variable $html.

Para extraer el texto del div activo.
PHP:
preg_match('/<div style="(.*?)color: #606060;border: 5px solid #0059B2;">(.*?)<\/div>/s', $html, $estado);

echo strip_tags($estado[0]);


Ésto debería bastar para extraer la url de la imagen y eventualmente una simple condición para verificar si la palabra "azul" fue encontrada.
PHP:
preg_match('#<img style="(.*?)" alt="([^\"]+)" src="([^\"]+)">#', $html, $datos);

if(strpos($datos[3], 'azul') !== false) {

	//Tu código aquí
}
 
Gracias ridemant, pero me sigue NO saliendo ningún resultado. Será que HTML dom no puede leer desde esta web?

HTML:
require 'simple_html_dom.php'; 
$html = file_get_html('https://www.aguasandinas.cl/web/aguasandinas'); 
$spans = $html->find('id.estadoOperacionalTooltip'); 
preg_match('/<div style="(.*?)color: #606060;border: 5px solid #0059B2;">(.*?)<\/div>/s', $spans, $estado); 
echo strip_tags($estado[0]);  

preg_match('#<img style="(.*?)" alt="([^\"]+)" src="([^\"]+)">#', $spans, $datos); 

if(strpos($datos[3], 'azul') !== false) { 

    echo 'funciona?'; 
}
 
Lo que sucede, es que el sitio web que mencionas usa un servicio de seguridad llamado Incapsula. Ésto es para evitar que ciertos bots puedan acceder al contenido del sitio. Entonces, no podrás usar directamente cURL o peor aún file_get_html (lo que intentas usar), debido a que la seguridad pone una serie de pruebas a nivel de javascript, es decir, se deberá ejecutar en varias instancias en tu navegador para finalmente darte permiso al contenido. Para eludir la seguridad puedes usar desde C++ hasta una simple extensión Chrome, yo te recomiendo Python.
 
Agradecido, probaré con tus recomendaciones.
 
Utiliza puppeteer para crear el scrapping
 
Gracias, veamos que resulta.
 
Atrás
Arriba