Advertisement
  1. Code
  2. Web Scraping

Extracción de data a escala con Zenscrape

Scroll to top
Read Time: 8 min
Sponsored Content

This sponsored post features a product relevant to our readers while meeting our editorial guidelines for being objective and educational.

Spanish (Español) translation by Julio (you can also view the original English article)

Extraer datos de la web es la mejor manera de llevar tu empresa al siguiente nivel. Te permite automatizar el proceso de extraer contenido completo de una variedad de fuentes.

Desafortunadamente, la extracción automatizada en la web no es un camino fácil. Algunos sitios web podrían activar el bloqueo al extraer esos datos, mientras otros la crean utilizando herramientas que básicamente hacen primitivos inútiles a los extractores de la web.

En esta publicación, te mostraré cómo puedes usar Zenscrape para superar todos esos problemas y extraer datos a escala de cualquier sitio web, sin preocuparse de que seas bloqueado.

Ventajas al utilizar Zenscrape

Empiezo la discusión con una lista de algunas de las maravillosas funciones de Zenscrape que te ayudarán a terminar tu trabajo y ponerla aparte de otras herramientas de extracción.

Renderizado de Javascript

Muchos sitios web están activamente utilizando JavaScript para servir contenido a los visitantes. Lo que significa que el contenido que ve un simple extractor que visite una página web pueda ser diferente del contenido que los usuarios ven cuando visitan una página web a través de un navegador.

Zenscrape resuelve el problema permitiendo utilizar sus APIs para hacer el requerimiento en uno moderno, sin cabecera del navegador Chrome. Esto soporta todas las librerías populares y estructuras como Vue, Angular y React entre otros.

Extrayendo datos a escala

Algunos proyectos requerirán que tu extracción de sitios web sea a gran escala y esta situación presenta sus propios desafíos. Hay una gran probabilidad de que seas bloqueado por el sitio web y tomará mucho más tiempo obtener todos los datos que necesitas haciendo un simple requerimiento una vez.

Zenscrape supera estos temas proveyéndote un enorme pool IP y servidor proxy automático para facilitar el ocultamiento de tu robot de extracción. También te da la opción de hacer requerimientos recurrentes en función de una extracción rápida a larga escala.

Extrayendo contenido utilizando Zenscrape

Aprenderemos cómo utilizar la API Zenscrape para extraer contenido de diferentes clases de sitios web.

Puedes empezar con crear una cuenta en el sitio web. Zenscrape ofrece un plan gratuito, solo tienes simplemente que registrarte y seguir el tutorial. Te dará acceso a una clave API y podrás hacer requerimientos. Puedes leer la documentación detallada para descubrir como  hacer requerimientos utilizando la API en una variedad de lenguajes y entornos como PHP, Python y Node.js.

Zenscrape Documentation RegistrationZenscrape Documentation RegistrationZenscrape Documentation Registration

Los fragmentos de código en la documentación se completarán previamente con tus claves APIs una vez que te hayas registrado exitosamente e ingresado.

También puedes ver otra información relacionada con la cuenta como el uso estadístico y tu clave API en el panel de cuenta de la página.

Zenscrape DashboardZenscrape DashboardZenscrape Dashboard

Extraer contenido de Wikipedia

Zenscrape te permite extraer HTML de una página web que puedes manipular con un analizador que elijas. Utilizaremos el analizador DiDOM basado en PHP para nuestro ejemplo aquí, también podrás utilizar algunos otros mencionados en blog de publicaciones de Zenscrape.

Estaremos extrayendo de una página de Wikipedia acerca de un faro para nuestro ejemplo. Aquí está nuestro código PHP para extraer el HTML utilizando una API de Zenscrape.

1
<?php
2
3
$ch = curl_init();
4
5
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
6
curl_setopt($ch, CURLOPT_HEADER, false);
7
8
$data = [
9
   "url" => "https://en.wikipedia.org/wiki/White_Shoal_Light,_Michigan",
10
];
11
12
curl_setopt($ch, CURLOPT_URL, "https://app.zenscrape.com/api/v1/get?" . http_build_query($data));
13
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
14
    "apikey: YOUR_API_KEY"  
15
));
16
17
$html = curl_exec($ch);
18
19
curl_close($ch);
20
21
?>

La variable $html en este punto contiene el marcador de Zenscrape extraída de una página de Wikipedia. Las primeras líneas del marcador lucen así:

1
<!DOCTYPE html>
2
<html class="client-nojs" lang="en" dir="ltr">
3
<head>
4
<meta charset="UTF-8"/>
5
<title>White Shoal Light, Michigan - Wikipedia</title>
6
... and more ...

Ahora podemos pasar este HTML a nuestro analizador DOM para extraer información como el encabezamiento principal, el primer párrafo o la primera imagen del artículo de Wikipedia.

1
<?php
2
3
$document = new Document($html);
4
5
$heading = $document->find("h1")[0]->text();
6
$top_image = $document->find("td.infobox-image img")[0]->src;
7
$first_paragraph = $document->find("div#mw-content-text p")[0]->text();
8
9
echo '<h2>'.$heading.'</h2>';
10
echo '<img src="'.$top_image.'">';
11
echo '<p>'.$first_paragraph.'</p>';
12
13
?>

Aquí está el resultado que obtuve, estilizado con algo básico de CSS.

WikiPedia White Shoal Light, MichiganWikiPedia White Shoal Light, MichiganWikiPedia White Shoal Light, Michigan

Extraer contenido localizado de sitios web

La página inicial del sitio web popular Reddit luce distinto dependiendo del país desde donde la visitas. El sitio web intenta rellenarla con el contenido que sea relevante y popular en tu locación.

En nuestro ejemplo, estaremos utilizando Zenscrape para obtener algunos encabezados de la página de inicio de Reddit estableciendo como países a los Estados Unidos y Reino Unido. Como sea, Zenscrape te permite seleccionar la locación de más de 230 países diferentes para la extracción de contenido. La parte maravillosa es que puedes hacer todo eso con simplemente especificar dos parámetros en tu requerimiento API.

Aquí está el código que utilizamos para obtener el HTML de la página de inicio Reddit de Reino Unido usando la API de Zenscrape.

1
<?php
2
3
$ch = curl_init();
4
5
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
6
curl_setopt($ch, CURLOPT_HEADER, false);
7
8
$data = [
9
   "url" => "https://www.reddit.com/",
10
   "premium" => "true",
11
   "location" => "uk"
12
];
13
14
curl_setopt($ch, CURLOPT_URL, "https://app.zenscrape.com/api/v1/get?" . http_build_query($data));
15
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
16
    "apikey: YOUR_API_KEY"  
17
));
18
19
$html = curl_exec($ch);
20
21
curl_close($ch);
22
23
?>

Como puedes ver, no es muy diferente del código que usamos de la sección anterior. Esta vez, sin embargo, pasamos dos parámetros de requerimiento adicionales llamados premium y location. Colocando a premium con el valor true te permite utilizar proxis residenciales. Después de esto, puedes utilizar location para especificar el país del cual quieres visitar la URL. Lo he colocado a uk en este ejemplo.

La documentación Zenscrape acerca de extracción web provee más detalles de otros parámetros.

Similar al ejemplo previo, la variable $html almacena HTML extraído que obtuvimos. Ahora, podemos analizar y utilizar este HTML en la forma que nos guste.

1
<?php 
2
3
$document = new Document($html);
4
$all_headings = $document->find("h3");
5
6
echo '<h2>Reddit Front Page (United Kingdom)</h2>';
7
echo '<ol>';
8
foreach($all_headings as $heading) {
9
    $heading_text = $heading->text();
10
11
    if(strlen($heading_text) > 15) {
12
        echo '<li><p>'.$heading->text().'</p></li>';
13
    }
14
}
15
echo '</ol>';
16
17
?>

Estoy utilizando para mostrar una lista de encabezados para propósitos de demostración.

Reddit Homepage (United Kingdom)Reddit Homepage (United Kingdom)Reddit Homepage (United Kingdom)

Aquí está lo que obtuve cuando utilicé la API de Zenscrape para extraer de Reddit como visitante de Estados Unidos.

Reddit Homepage (United States)Reddit Homepage (United States)Reddit Homepage (United States)

Extraer contenido después de renderizar con JavaScript

Otro problema que Zanscrape te soluciona es lo fácil que puedes extraer el HTML que se hará de los visitantes cuando vayan al sitio web construyendo librerías y estructuras como Vue, React o Angular.

He creado una demo simple CodePen para demostrar esta función. Los extractores principiantes verán diferentes contenidos en esta página actual que cuando lo hagan los visitantes, porque el contenido en esta página web está traducida utilizando React.

Obtendrás el siguiente HTML dentro del elemento raíz cuando utilices una simple cURL or el requerimiento file_ger_contents().

1
<h1>Nothing to see here!</h1>

Zenscrape, por otro lado, te da la opción de traducir el requerimiento en un moderno encabezado de navegador Chrome. Significa que el HTML que obtuviste utiliza la misma API de Zenscrape que los usuarios verán cuando visiten la página.

Aquí está el código que utilicé para extraer el HTML está finalmente mostrado a los usuarios después de ejecutar JavaScript.

1
<?php
2
3
$ch = curl_init();
4
5
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
6
curl_setopt($ch, CURLOPT_HEADER, false);
7
8
$data = [
9
   "url" => "https://cdpn.io/Shokeen/debug/VwWjogr/VJMxxEJxmRYM",
10
   "render" => "true",
11
   "wait_for_css" => "div.joke",
12
];
13
14
curl_setopt($ch, CURLOPT_URL, "https://app.zenscrape.com/api/v1/get?" . http_build_query($data));
15
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
16
    "apikey: YOUR_API_KEY"  
17
));
18
19
$html = curl_exec($ch);
20
curl_close($ch);
21
22
echo $html;
23
24
?>

Como puedes ver, todo lo que necesitas es pasar dos parámetros, render y wait_for_css. Coloca render en true le dirá a Zenscrape que necesita usar el navegador sin encabezado para hallar contenido porque JavaScript está involucrado. Puedes colocar wait_for_css en el selector CSS de los elementos que quieras.

El fragmento de código anterior te permite extraer HTML que puede ser analizado para obtener el siguiente contenido.

Kleptomaniac JokeKleptomaniac JokeKleptomaniac Joke

Pensamientos finales

Zenscrape soluciona muchos de los problemas de extracción para la gente que quiere extraer datos a escala. Lo que lo hace genial es el hecho de que es fácil implementar y no requiere invertir días o semanas para aprender acerca de API.

Como viste en los tres ejemplos de arriba, Zenscrape toma en cuenta todo desde la localización para que JavaScript traduzca para ti solo pidiendo pocos parámetros. Sólo necesitas escribir pocas líneas de código y todo estará ejecutándose en corto tiempo. Hay todavía creadores de requerimientos que podrás utilizar para conseguir el código necesario para hacer requerimientos utilizando Python, Node.jd, PHP, etc.

Puedes utilizar API de Zenscrape para hacer muchas tareas como conseguir líder de ventas o rastrear precios y disponibilidad de productos en las plataformas de comercio electrónico. Visita Zenscrape y lee acerca de esto. Hay un plan gratuito que viene con 1,000 créditos por mes. Puedes registrarte por una cuenta gratuita de Zenscrape en un par de minutos y probar todas las funciones tú mismo.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.