Categorías: Programación

Ejemplos de programacion 4 – Web Scraper

Ejemplos de programacion 4 – Web Scraper

En este ejercicio de programacion veremos como hacer un Web Scraper para obtener todos los parrafos de una pagina web en 5 lenguajes de programacion
C, Python, Java, JavaScript y Go

C

Aquí tienes un ejemplo básico de cómo crear un web scraper en C utilizando la biblioteca libcurl para realizar solicitudes HTTP y la biblioteca libxml2 para analizar el contenido HTML:

#include 
#include <curl/curl.h>
#include <libxml/HTMLparser.h>

// Función de callback para escribir datos recibidos en la solicitud HTTP
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) {
    // Simplemente imprimir los datos recibidos en la consola
    printf("%s", ptr);
    return size * nmemb;
}

int main() {
    CURL *curl;
    CURLcode res;
    char *url = "https://www.example.com";

    // Inicializar la biblioteca libcurl
    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();

    if(curl) {
        // Configurar la URL de la solicitud
        curl_easy_setopt(curl, CURLOPT_URL, url);
        
        // Configurar la función de callback para escribir los datos 
        //recibidos
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);

        // Realizar la solicitud HTTP
        res = curl_easy_perform(curl);

        // Verificar si la solicitud fue exitosa
        if(res != CURLE_OK) {
            fprintf(stderr, "Error al realizar la solicitud: %s\n", 
                 curl_easy_strerror(res));
        }

        // Limpiar y liberar recursos
        curl_easy_cleanup(curl);
    }
    else {
        fprintf(stderr, "Error al inicializar libcurl\n");
    }

    // Finalizar la biblioteca libcurl
    curl_global_cleanup();

    return 0;
}

Este código utiliza libcurl para realizar una solicitud HTTP a una URL específica y luego imprime los datos recibidos en la consola. Para analizar el contenido HTML y extraer información específica, puedes integrar la biblioteca libxml2 o alguna otra biblioteca de análisis HTML en tu código C. Recuerda siempre revisar y cumplir los términos de uso y políticas de la página web que estás scrapeando.

Python

El mismo ejemplo web scraper en Python utilizando la biblioteca BeautifulSoup para analizar el contenido HTML y la biblioteca requests para realizar solicitudes HTTP:

 

import requests
from bs4 import BeautifulSoup

# URL de la página a scrapear
url = 'https://www.example.com'

# Realizar la solicitud GET a la página
response = requests.get(url)

# Verificar si la solicitud fue exitosa (código de estado 200)
if response.status_code == 200:
    # Parsear el contenido HTML de la página
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # Ejemplo: Extraer todos los enlaces de la página
    links = soup.find_all('a')
    
    # Imprimir los enlaces encontrados
    for link in links:
        print(link.get('href'))
else:
    # Si la solicitud no fue exitosa, imprimir un mensaje de error
    print('Error al cargar la página:', response.status_code)

Este código realiza una solicitud GET a una página web, parsea el contenido HTML utilizando BeautifulSoup y luego extrae todos los enlaces (`<a>` tags) de la página. Puedes modificar este ejemplo para adaptarlo a tus necesidades específicas, como extraer otros tipos de datos o interactuar con la página de manera diferente. Recuerda siempre revisar y cumplir los términos de uso y políticas de la página web que estás scrapeando.

Java

Aquí tienes el ejemplo básico de cómo crear un web scraper en Java utilizando la biblioteca Jsoup para analizar el contenido HTML y la biblioteca HttpURLConnection para realizar solicitudes HTTP:

 

 

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

public class WebScraper {

    public static void main(String[] args) {
        String url = "https://www.example.com";

        try {
            // Realizar la solicitud HTTP
            HttpURLConnection connection =
             (HttpURLConnection) new URL(url).openConnection();
            connection.setRequestMethod("GET");

            // Verificar si la solicitud fue exitosa 
            //(código de estado 200)
            if (connection.getResponseCode() == 200) {
                // Parsear el contenido HTML de la página
                Document doc = Jsoup.connect(url).get();

                // Ejemplo: Extraer todos los enlaces de 
                //la página
                Elements links = doc.select("a[href]");
                
                // Imprimir los enlaces encontrados
                for (Element link : links) {
                    System.out.println(link.attr("href"));
                }
            } else {
                System.out.println("Error al cargar la página: " 
                + connection.getResponseCode());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Este código realiza una solicitud HTTP GET a una página web utilizando HttpURLConnection, y luego utiliza Jsoup para analizar el contenido HTML y extraer los enlaces (`<a>` tags) de la página. Puedes modificar este ejemplo para adaptarlo a tus necesidades específicas, como extraer otros tipos de datos o interactuar con la página de manera diferente.

 

Javascript

Aquí tienes un ejemplo básico de cómo crear un web scraper en JavaScript utilizando la biblioteca `axios` para realizar solicitudes HTTP y la biblioteca `cheerio` para analizar el contenido HTML:

 

const axios = require('axios');
const cheerio = require('cheerio');

// URL de la página a scrapear
const url = 'https://www.example.com';

// Realizar la solicitud GET a la página
axios.get(url)
    .then(response => {
        // Verificar si la solicitud fue exitosa 
        //(código de estado 200)
        if (response.status === 200) {
            // Cargar el contenido HTML de la página 
            //en Cheerio
            const $ = cheerio.load(response.data);
            
            // Ejemplo: Extraer todos los enlaces de 
            //la página
            $('a').each((index, element) => {
                console.log($(element).attr('href'));
            });
        } else {
            console.error('Error al cargar la página:', 
            response.status);
        }
    })
    .catch(error => {
        console.error('Error al realizar la solicitud:', 
          error);
    });

Este código utiliza `axios` para realizar una solicitud GET a una página web y `cheerio` para cargar y analizar el contenido HTML. Luego, extrae todos los enlaces (`<a>` tags) de la página. Puedes modificar este ejemplo para adaptarlo a tus necesidades específicas, como extraer otros tipos de datos o interactuar con la página de manera diferente.

 

GO

Aquí tienes un ejemplo básico de cómo crear un web scraper en Go utilizando las bibliotecas estándar `net/http` para realizar solicitudes HTTP y `golang.org/x/net/html` para analizar el contenido HTML:

 

package main

import (
    "fmt"
    "net/http"
    "golang.org/x/net/html"
    "strings"
)

func main() {
    url := "https://www.example.com"

    // Realizar la solicitud HTTP GET
    response, err := http.Get(url)
    if err != nil {
        fmt.Println("Error al realizar la solicitud:", err)
        return
    }
    defer response.Body.Close()

    // Verificar si la solicitud fue exitosa
    // (código de estado 200)
    if response.StatusCode != http.StatusOK {
        fmt.Println("Error al cargar la página:", 
            response.StatusCode)
        return
    }

    // Parsear el contenido HTML de la página
    tokenizer := html.NewTokenizer(response.Body)
    for {
        tokenType := tokenizer.Next()

        switch tokenType {
        case html.ErrorToken:
            // Fin del documento
            return
        case html.StartTagToken, html.SelfClosingTagToken:
            token := tokenizer.Token()
            if token.Data == "a" {
                // Extraer y limpiar la URL del enlace
                for _, attr := range token.Attr {
                    if attr.Key == "href" {
                        fmt.Println(cleanURL(attr.Val))
                    }
                }
            }
        }
    }
}

// Función para limpiar la URL del enlace
func cleanURL(url string) string {
    // Si la URL es relativa, convertirla a absoluta
    if strings.HasPrefix(url, "/") {
        return "https://www.example.com" + url
    }
    return url
}

Este código realiza una solicitud HTTP GET a una página web utilizando `net/http`, y luego utiliza `golang.org/x/net/html` para analizar el contenido HTML y extraer los enlaces (`<a>` tags) de la página. Puedes modificar este ejemplo para adaptarlo a tus necesidades específicas, como extraer otros tipos de datos o interactuar con la página de manera diferente.

Otros ejemplos de programacion

Ejemplos de programacion

Ejemplos de programacion 2 – Ordenacion

Ejemplos de programacion 3 – ahorcado

Ejemplos de programacion 5 – el juego de la vida

Ahora puedes descargar el ebook con los ejemplos de programacion de forma gratuita (por tiempo limitado)

Ejemplos de programacion

Una buena forma de introducirte en el mundo de la programacion es seguir ejemplos de codigo y seguir su funcionamiento para tener claro la sintaxis, los distintos tipos de datos, estructuras de control del codigo,etc

En este ebook os damos varios ejemplos de implementacion en varios lenguajes de programacion.

La idea es que veais la sintaxis y como se trabaja en varios lenguajes y tomar ideas en tus futuros proyectos de programacion

Los ejemplos los vamos a dar en 5 lenguajes de programación distintos: C, Python, Java, JavaScript y Go.

Compartir