Web scraping con C#

Online_Backup_2

Web Scraping es un proceso de recopilación de información de forma automática a partir de la Web. En este post vamos a ver como obtener información desde otro sitio automáticamente.

Como ejemplo vamos a tomar la siguiente página:

La página pertenece a la empresa Ibero Cruceros, y muestra, información sobre el estado y ubicación de uno de sus barcos (Grand Mistral).

Lo que vamos a hacer es tomar las coordenadas del barco para mostrarlas en un mapa usando la API de Google Maps, y además agregar en el mapa otras informaciones que se pueden obtener de la misma pagina (velocidad del barco, rumbo, dirección del viento, temperatura, humedad, presión, y velocidad del viento).

Ejemplo del DOM (el pedazo DOM que nos interesa para lo que vamos a hacer).

<ul class=”shipInfo”>

<li class=”speed”><span class=”left”>Velocidad:</span><span class=”right”>18.4 Knots</span></li>

<li class=”heading”><span class=”left”>Rumbo:</span><span class=”right”>51.0°</span></li>

<li class=”latitude”><span class=”left”>Latitud:</span><span class=”right”>34°7’35” S</span></li>

<li class=”longitude”><span class=”left”>Longitud:</span><span class=”right”>52°55’57” W</span></li>

<li class=”winddirection”><span class=”left”>Direcciòn del vento:</span><span class=”right”>321.6°</span></li>

<li class=”temperature”><span class=”left”>Temperatura:</span><span class=”right”>21.0°C</span></li>

<li class=”humidity”><span class=”left”>Humedad:</span><span class=”right”>66.1%</span></li>

<li class=”pressure”><span class=”left”>Presiòn:</span><span class=”right”>1012.4 hPa</span></li>

<li class=”windspeed”><span class=”left”>Velocidad del viento:</span><span class=”right”>16.7 Km/h</span></li>

</ul>

Para hacer scraping en C#, creamos un nuevo proyecto web, y agregamos referencias a ScrapySharp, y a HtmlAgilityPack (podemos agregarlas directamente desde NuGet).

Armé una clase “Scraper” que devuelve el DOM de un sitio que nosotros le solicitamos (Uri), para luego, usando selectores del tipo CSS, obtener el/los elemento/s del DOM que estemos buscando.

Ejemplo de uso:

HtmlNode html = new Scraper().GetNodes(new Uri(“http://webcams.iberocruceros.com/FleetMonitor/WebCam.aspx?ShipCode=MI”));

var lat = html.CssSelect(“li.latitude span.right”).FirstOrDefault().InnerText;
var lon = html.CssSelect(“li.longitude span.right”).FirstOrDefault().InnerText;

En el ejemplo se puede ver como obtener la latitud y longitud de la ubicación del barco. De la misma forma podríamos obtener mas información.

Dejo la implementación del método GetNodes de la clase Scraper:

       public HtmlNode GetNodes(Uri url)
{
// Create the WebRequest for the URL we are using
var req = WebRequest.Create(url);

// Get the stream from the returned web response
var stream = new StreamReader(req.GetResponse().GetResponseStream());

var htmlDocument = new HtmlDocument();
htmlDocument.Load(stream);
return htmlDocument.DocumentNode;
}

[Facebook] [Google] [LinkedIn] [Twitter] [Windows Live] [Email]
Posted in Programacion Tagged with: , ,
One comment on “Web scraping con C#
  1. Rhadimer says:

    Hola este post es muy interesante. Me gustaria hacer lo mismo pero en una aplicación Windows forms de escritorio usando c#. Necesito hacer esto por favor ayudame.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

ACERCA DE…

Soy desarrollador, estudiante de ingeniería en informática en UADE, trabajo como TE en el equipo de nuevas tecnologías de Microsoft Argentina, Chile y Uruguay.

Me pueden encontrar en Twitter (@AleBanzas), Facebook (/AleBanzas), o LinkedIn (/in/AleBanzas).