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
    }
}

Crear CRUD en Windows Forms con C# .Net, Entity Framework y Sql Server

En este video te enseñare a crear un CRUD en Windows forms, después de ver el video serás capaz de obtener los datos de una base de datos, insertar datos, editar datos y eliminaros, todo a través de una interfaz hecha en Windows forms.

¿Cómo permitir solicitudes remotas CORS a SignalR .Net? C#

En el siguiente video muestro como configurar SignalR para que permita solicitudes de ips remotas, solicitudes CORS; también explico con un ejemplo y demuestro como funciona.

El video es parte de un curso completo de C# .Net y puedes ver todos los videos dando clic aquí.

¿Cómo agregar y actualizar funciones de SQL Server en Entity Framework?, C# .Net

En este video te enseñare cómo es posible agregar funciones de tipo tabla de SQL Server en Entity Framework; también te enseñare como actualizar tus funciones para que no te genere errores al hacerlo.

Curso para crear sistema para facturación electrónica web gratis en C# .Net

En estos videos programados en vivo, te enseñare como hacer un sistema web que te sirva para la facturación electrónica, para que puedas generar tus facturas desde una interfaz amigable para el usuario.

El código fuente se encuentra al final de esta entrada; si quieres recibir un sistema con más elementos que este gratuito, puedes apoyarme vía patreon desde 1 USD al mes:
https://www.patreon.com/powerhdeleon

Puedes ver más videos gratis en mi canal de youtube: canal de hdeleon.net

1. Creación del proyecto en MVC .Net, y acceso de usuario

2. Librería para creación y sellado de xml 3.3 y catálogos del SAT en mysql

3. Creación de tablas en base de datos mysql para facturación

4. View Model para creación de factura

5. Seguridad y Vista para crear factura

6. Crear autocompletar de claves del SAT

7. Crear SelectList de catálogos del SAT – Parte 1

7. Crear SelectList de catálogos del SAT – Parte 2

8. Conceptos dinámicos

9. Crear objeto comprobante

10. Código para sellar el XML

11. Creación del archivo XML

12. Sellado de archivo XML

13.- Creación de capa de timbrado

14.- Timbrado de factura

Descargar el código fuente

Recuerda que la publicidad es para una buena causa, apoyar perros que están en la calle.

¿Cómo agregar y actualizar procedimientos almacenados a Entity Framework?, C# .Net

En este video te explico cómo hacer un procedimiento almacenado en SQL Server, agregarlo al Entity Framework, ejecutarlo en C# .Net, y actualizarlo por si surge un cambio en nuestro procedimiento almacenado.

¿Cómo mostrar los usuarios activos en tiempo real en C# .Net con SignalR?, Real time

En este video te mostrare como saber cuántos usuarios están activos en tu sitio web en tiempo real utilizando SignalR, una tecnología que sirve para conectarnos con sockets de manera rápida y funcional.