Leer datos de paginas web desde visual basic (acceder al DOM)

Publicado el: 18 de marzo de 2015
Principiante
Acerca de este proyecto
Se explica como acceder a los elementos de una pagina web a través del control web browser de visual basic.
visual asic web browser scrapping
Publicidad
DETALLES

El control webBrowser es un componente que nos permite manipular una página web desde visual basic, ya sea tanto para leer o escribir su contenido desde nuestra propia aplicación.

Todo esto es posible gracias al DOM (Document Object Model, es cual es la estructura de objetos que genera el navegador cuando se carga un documento y se puede alterar por medio de javascript para cambiar dinamicamente los contenidos de la página.

De esta manera es posible tener acceso al título de la página, a su contenido, imágenes, enlaces, formularios y cada uno de sus elementos como input, checkboxes, radio buttons, botones, etc.

 

En el video de muestra la realización de varios ejercicios donde a través del control webBrowser accedemos al título de la página web cargada, obtenemos el código fuente de la misma y lo mostramos en un control textbox, también obtenemos una lista de las imágenes cargadas en la página y mostramos cada imagen seleccionada en dicha lista en un control PictureBox. Por último se explica cómo acceder a un elemento de la página a través de su ID, donde a manera de ejemplo con la página del baloto electrònico, mostramos cada número ganador en un control tipo label.

Se inserta el control webBrowser en el formulario, por defecto visual basic le asigna el nombre de WebBrowser1, podemos modificarlo si deseamos.

El control posee varias propiedades y métodos para poder manipular la página web.

Primero que todo debemos navegar a la página web con la cual se va a trabajar, para ello nos valemos del método navigate.

webBrowser.navigate("url de la página")

IMPORTANTE: Para poder manipular la pàgina web a travès del control web browser debemos esperar a que se haya cargado por completo el documento, es decir, que todos loes elementos de la pàgina web se hayan cargado correctamente, para evitar asi errores al momento de acceder a sus elementos, ya que si por ejemplo, no se han cargado todas las imàgenes e intentamos por còdigo acceder a ellas, nos darà un error en el programa.

Por eso el web browser posee un evento que se ejecuta sólo cuando se haya cargado el documento completamente. Dicho evento es el DocumentComplete.

Si deseamos obtener el título de la página, debemos usar la propiedad document.Title

Asi que todas las acciones que realizaremos en el control webBrowser seràn escritas dentro de este evento.

Dim titulo as String

titulo = webBroser.Document.Title

 Así la variable titulo contendrá el título de la página web cargada en el web browser.

Si tenemos la necesidad de acceder a las imágenes de la página,

webBrowser.Document.Images.Item(x).getAttribute("src");

donde x es un número o variable numérica que indíque la posición de la imagen que se quiera obtener.

Por ejemplo, si deseamos obtener una lista de todas las imágenes de la pàgina, e insertar la ruta de cada imagen en una lista, insertamos un control tipo lista y escribimos lo siguiente:

for i = 0 to webBrowser.Document.Images.Count - 1

  list1.Items.Add(webBrowser.Document.Images.Item(i).getAttribute("src"));

Next

En el último ejercicio mostrado en el video se muestra como  obtener el valor de algun elemento de la página.
La página de ejemplo que usaremos en esta ocasión será la de la famosa loteria colombiana de sistema de balotas "el baloto",cuya página web es www.baloto.com

La página web al cargar muestra en un rectángulo, los números ganadores ( seis ) las cuales muestro en color rojo en la siguiente imagen.Asi que lo que haremos es mostrar en un control tipo label cada uno de los números ganadores mostrados en la página.



Para poder manipular un elemento de la pàgina hay que conocer su ID, visualizando el còdigo fuente revisamos cual es el ID del elemento y ese nombre es el que debemos pasar como paràmetro del mètodo GetElementById del control web browser.

 NOTA: a la fecha el sitio web baloto.com ha modificado el código fuente de su sitio, por lo tanto, es probable que el código fuente de este programa no funcione para este sitio, pero de lo aprendido se puede aplicar para otros sitios.

Private Sub webBrowser() Handles Button1.Click
        
label1.text = (webBrowser.Document.GetElementById("balota-tester").InnerText)
         label2.text = (webBrowser.Document.GetElementById("t-balota-dos").InnerText)
         label3.text = (webBrowser.Document.GetElementById("t-balota-tres").InnerText)
         label4.text = (webBrowser.Document.GetElementById("t-balota-cuatro").InnerText)
         label5.text = (webBrowser.Document.GetElementById("t-balota-cinco").InnerText)
         label6.text = (webBrowser.Document.GetElementById("t-balota-seis").InnerText)

  
  End Sub


CODIFICACIÓN
Codigo programa en visual basic-
Advertencia, el sitio web baloto.com modifico su codigo fuente, por lo tanto, es probable que este codigo no funcione con este sitio.
Public Class Form1
    'Relizado por José Luis Bejarano Vàsquez
    'http://www.tecnimakers.com
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        web.Navigate('www.baloto.com')

    End Sub

    
    Private Sub web_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles web.DocumentCompleted
        Dim i As Integer
        lbl1.Text = web.Document.GetElementById('balota-tester').InnerText
        lbl2.Text = web.Document.GetElementById('t-balota-dos').InnerText
        lbl3.Text = web.Document.GetElementById('t-balota-tres').InnerText
        lbl4.Text = web.Document.GetElementById('t-balota-cuatro').InnerText
        lbl5.Text = web.Document.GetElementById('t-balota-cinco').InnerText
        lbl6.Text = web.Document.GetElementById('t-balota-seis').InnerText

        For i = 0 To web.Document.Images.Count - 1

            lista.Items.Add(web.Document.Images.Item(i).GetAttribute('src'))

        Next






    End Sub

    Private Sub lista_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lista.SelectedIndexChanged
        pct.ImageLocation = lista.SelectedItem
    End Sub
End Class

Autor: sistemasymicros
26 proyectos 6 seguidores 0 siguiendo

Ingeniero en electrónica. Maker, apasionado por la programación. Sigueme en sistemasymicros.

PROYECTOS RELACIONADOS
COMENTARIOS
Para publicar un comentario debes