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