Es una necesidad bastante usual la de recoger información disponible en Internet.
Algunos sitios permiten hacerlo en forma amigable exponiendo algún tipo de API, que puede ser consumida conectándose a un webservice.
En otros casos, lo mejor que puede hacerse es algo de WebScrapping.
Claro que es una técnica muy poco fiable y bastante costosa en términos computacionales, pero… si no queda otra…
En este caso, de lo que se trata es de extraer las direcciones de correo electrónico presentes en una página cualquiera, por ejemplo:
Se trata de un proceso de dos pasos
Cómo obtener los contenidos de una página usando PHP
El primer paso es obtener el contenido de la página. En realidad, lo que nos interesa es el HTML de la página, las imágenes, hojas de estilo y demás no es necesario en este momento.
Una forma muy sencilla de conseguirlo es usar la función file_get_contents:
<?php $html = file_get_contents('http://pagina-objetivo.com');
Cómo identificar correos electrónicos dentro de un texto
El segundo problema a resolver es, una vez que obtuvimos todo ese texto HTML… ¿cómo podemos determinar qué direcciones de correo electrónico hay dentro?
Un modo muy simple es utilizar una expresión regular.
Afortunadamente, las direcciones de correo electrónico siguen un patrón bastante estructurado: todas tienen una @
en el medio y, al menos, un .
a la derecha.
Podríamos usar una expresión mucho más compleja, pero comencemos por esta.
Nuestro aliado en esta ocasión será la función preg_match_all:
<?php $html = file_get_contents('http://pagina-objetivo.com'); preg_match_all('/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i', $html, $matches);
Con esto nos quedamos con todos los candidatos a correos electrónicos.
Luego, para mayor seguridad podemos eliminar aquellos que no pasen la verificación propia de PHP:
<?php $html = file_get_contents('http://pagina-objetivo.com'); preg_match_all('/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i', $html, $matches); $emails = array_unique(array_filter($matches, function(string $str) { return filter_var($str, FILTER_VALIDATE_EMAIL);}));
Con esto obtendremos un arreglo que contiene todas las direcciones de correo presentes en una página.
- Cómo enviarencabezados SOAP desde PHP - 09/12/2024
- Por qué PHP 8 no satisface el requisito ^7.3 de composer - 09/12/2024
- Cómo usar PHPUnit - 03/12/2024
Hola
Estoy corriendo el codigo en XAMPP ejecutando el archivo index.php Es correcto?
Hola. En principio te diría que sí.
Depende de cómo esté la configuración de tu entorno… ¿Tienes algún problema en particular?
Las consultas con este método me devuelven un error 500 siempre.
Hola Victoria!
¿Podrías compartir algo de código así te puedo ayudar mejor?
Saludos!