Curso de Web scraping en C# .Net

En este nuevo curso te mostrare como puedes hacer web scraping de manera fácil y rápida con C# .Net.

1.- Obtener contenido HTML, seleccionar elementos por clase, nombre, id

En este video te muestro como puedes seleccionar elementos de una página web de manera natural, utilizando su clase, su id o su nombre de etiqueta.

2.- Guardar contenido de un sitio web en base de datos

En este segundo video te enseñare a como puedes guardar el contenido de un sitio web en una base de datos.

3.- Descargar todas las imágenes de una url

En este tercer video te enseñare como puedes descargarte todas las imagenes que se visualizan en una url de un sitio web.

4.- Descargar todas las imágenes de TODO un sitio web

En este video te enseñare a como navegar por todas las ligas de una url e ir recursivamente url por url del sitio entero descargando las imagenes.

Código fuente


using HtmlAgilityPack;
using ScrapySharp.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using WebScraping.Models;

namespace WebScraping
{
    class Program
    {
        static List<string> lstYaInvocadas = new List<string>();
        static List<string> lstImagenesDescargadas = new List<string>();
        static string pathImages = @"C:\tuRuta\";
        static void Main(string[] args)
        {
           
            HtmlWeb oWeb = new HtmlWeb();
            string url = "https://hdeleon.net/";

           


            /*Video: 2 - Obtener titles ***********************************************/
             using (webscrapingEntities db = new webscrapingEntities()) {
                 for (int i = 1; i <= 32; i++) {


                     if (i > 1)
                         url += "/page/" + i + "/";

                     HtmlDocument doc2 = oWeb.Load(url);

                     foreach (var Nodo in doc2.DocumentNode.CssSelect(".entry-title"))
                     {

                         var NodoAnchor = Nodo.CssSelect("a").First();
                         var oTitle = new titles();
                         oTitle.title = NodoAnchor.InnerHtml;

                         db.titles.Add(oTitle);
                         //MisTitulos.Add(NodoAnchor.InnerHtml);


                     }

                     Console.WriteLine("se analizo la pagina: "+i);
                 }

                 db.SaveChanges();
             }
             

            /* Video 3 - Ejemplo de robar imagenes ********************************************/
            
          
            HtmlDocument doc = oWeb.Load(url);

            //obtenemos las imagenes
            int num = 0;
            foreach (var Nodo in doc.DocumentNode.CssSelect("img"))
            {
                Console.WriteLine("Imagen robada: " + Nodo.GetAttributeValue("src"));
                using (WebClient oClient = new WebClient())
                {
                    string urlImagen = Nodo.GetAttributeValue("src");
                    oClient.DownloadFile(new Uri(urlImagen), pathImages + num + ".jpg");
                }
                num++;
            }


            /*Video 4 - Obtener todas las imagenes de todo el sitio web *************************/
            HtmlDocument doc3 = oWeb.Load(url);

            //obtener las imagenes de la url
            foreach (var Nodo in doc3.DocumentNode.CssSelect("img"))
            {
                // Console.WriteLine("Imagen robada: " + Nodo.GetAttributeValue("src"));
                using (WebClient oClient = new WebClient())
                {
                    string urlImagen = Nodo.GetAttributeValue("src");
                    string[] arrUrlImagen = urlImagen.Split('/');
                    string nombreImagen = pathImages + arrUrlImagen[arrUrlImagen.Length - 1];
                    if (!lstImagenesDescargadas.Contains(arrUrlImagen[arrUrlImagen.Length - 1]))
                    {
                        oClient.DownloadFile(new Uri(urlImagen), nombreImagen);

                        lstImagenesDescargadas.Add(arrUrlImagen[arrUrlImagen.Length - 1]);
                    }
                }
            }

            //recursividad urls
            foreach (var Nodo in doc3.DocumentNode.CssSelect("a"))
            {
                string urlSon = Nodo.GetAttributeValue("href");
                if (!lstYaInvocadas.Contains(urlSon) && urlSon.StartsWith("https://hdeleon.net/"))
                {
                    Console.WriteLine(urlSon);
                    lstYaInvocadas.Add(urlSon);
                    ObtienesImagenes(urlSon);

                }
            }

        }

        #region Helpers

        private  static void ObtienesImagenes(string url,string tab="")
        {
            try
            {
                HtmlWeb oWeb = new HtmlWeb();
                HtmlDocument doc3 = oWeb.Load(url);

                foreach (var Nodo in doc3.DocumentNode.CssSelect("img"))
                {
                    // Console.WriteLine("Imagen robada: " + Nodo.GetAttributeValue("src"));
                    using (WebClient oClient = new WebClient())
                    {
                        string urlImagen = Nodo.GetAttributeValue("src");
                        string[] arrUrlImagen = urlImagen.Split('/');
                        string nombreImagen =pathImages+ arrUrlImagen[arrUrlImagen.Length - 1];
                        if (!lstImagenesDescargadas.Contains(arrUrlImagen[arrUrlImagen.Length - 1]))
                        {
                            oClient.DownloadFile(new Uri(urlImagen), nombreImagen);

                            lstImagenesDescargadas.Add(arrUrlImagen[arrUrlImagen.Length - 1]);
                        }
                    }
                }

                foreach (var Nodo in doc3.DocumentNode.CssSelect("a") )
                {
                    string urlSon = Nodo.GetAttributeValue("href");
                    if ( !lstYaInvocadas.Contains(urlSon) && urlSon.StartsWith("https://hdeleon.net/"))
                    {
                        Console.WriteLine(tab+urlSon);
                        lstYaInvocadas.Add(urlSon);
                        ObtienesImagenes(urlSon, tab + ">");
                       

                    }
                }
            }
            catch { }
          
        }

        #endregion
    }
}