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