RegularExpressions

Extracción de enlaces de una página Web haciendo uso de expresiones regulares

En este artículo se vera como generar aplicaciones basadas en expresiones regulares para extraer información de interés para su futura manipulación.

Muchas veces necesitamos desarrollar un procedimiento o función que extraiga información importante de un documento de texto, por ejemplo los URLS de una página Web para generar un Spider o Robot. Gracias al uso de expresiones regulares crear este tipo de aplicaciones es bastante sencillo.

En el siguiente ejemplo se hará uso de los espacios de nombre (Namespaces).

Desde Visual Studio 2005.

Generar una forma Windows

Para este código se utilizara el Espacio de Nombres System, System.Data, System.Net, System.Text, System.Text.RegularExpressions y System.Collections

' Versión VB .Net
Imports System
Imports System.Net
Imports System.Text
Imports System.Text.RegularExpressions

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim listadoURL As New ArrayList()
        listadoURL = UrlList("http://www.e-mision.net/crazyhouse")
    End Sub

    Public Function UrlList(ByVal url As String) As ArrayList
        ' Se crea un arreglo de bytes
        Dim resultHTML() As Byte

        ' Se crea un objeto de la clase ArrayList 
        Dim linksArray As New ArrayList

        ' Se crea un objeto de la clase WebClient class 
        Dim myWebClient As New WebClient

        ' Se extrae el contenido HTML del url proporcionado por el usuario
        resultHTML = myWebClient.DownloadData(url)

        ' Crear un objeto UTF8 que describe como esta codificado el contenido de la página 
        Dim utf8Enc As New UTF8Encoding

        ' Se obtiene la codificación UTF8 del resultado resultHTML
        Dim myResultString As String = utf8Enc.GetString(resultHTML)

        ' Se convierte el resultado a minúsculas para facilitar el uso de la expresión regular.
        myResultString = myResultString.ToLower()

        ' Se genera una expresión regular para revisar y extraer los URL               
        Dim regularexpre As New Regex("href\s*=\s*(?:(?:\(?[^\]*)\)|(?[^\s]* ))")

        ' Extraer aquellas cadenas que cumplen con la expresión y se almacenan en una colección 
        Dim collectionurls As MatchCollection = regularexpre.Matches(myResultString)

        ' Se adicionan las cadenas(URLs) al arreglo
        For Each res As Match In collectionurls
            For Each t As Group In res.Groups
                linksArray.Add(t.Value)
            Next
        Next

        ' Se retorna el arreglo
        Return linksArray
    End Function
End Class

 

// Versión C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Text.RegularExpressions;
using System.Collections;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ArrayList listadoURL = new ArrayList();
            listadoURL = UrlList("http://www.e-mision.net/crazyhouse");
        }
        public ArrayList UrlList(string url)
        {

            // Se crea un arreglo de bytes
            byte[] resultHTML;

            // Se crea un objeto de la clase ArrayList 
            ArrayList linksArray = new ArrayList();

            // Se crea un objeto de la clase WebClient class 
            WebClient myWebClient = new WebClient();

            // Se extrae el contenido HTML del url proporcionado por el usuario
            resultHTML = myWebClient.DownloadData(url);

            // Crear un objeto UTF8 que describe como esta codificado el contenido de la página 
            UTF8Encoding utf8Enc = new UTF8Encoding();

            // Se obtiene la codificación UTF8 del resultado resultHTML
            string myResultString = utf8Enc.GetString(resultHTML);

            // Se convierte el resultado a minúsculas para facilitar el uso de la expresión regular.
            myResultString = myResultString.ToLower();

            // Se genera una expresión regular para revisar y extraer los URL               
            Regex regularexpre = new Regex("href\s*=\s*(?:(?:\(?[^\]*)\)|(?[^\s]* ))");

            // Extraer aquellas cadenas que cumplen con la expresión y se almacenan en una colección 
            MatchCollection collectionUrls = regularexpre.Matches(myResultString);

            // Se adicionan las cadenas(URLs) al arreglo
            foreach (Match res in collectionUrls)
            {
                foreach (Group t in res.Groups)
                {
                    linksArray.Add(t.Value);
                }
            }

            // Se retorna el arreglo

            return linksArray;
        }
    }
}

Con este ejemplo se ha aprendido como utilizar expresiones regulares para manipular información relevante.

Publicado en http://www.programar.net por Rubén Darío Sánchez