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

Download me
Autor: sistemasymicros
24 proyectos 1 seguidores 0 siguiendo

Ingeniero en electronica, desarrollador de software. Desarrollo de proyectos con microcontroladores.

COMENTARIOS
Para publicar un comentario debes