Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    1

    estrarre dati da pagina web con VB.NET

    Gentili lettori, sono totalmente digiuno di VB.NET e di programmazione in generale, e sono qui per chiedere aiuto a qualche anima pia.

    Dovrei realizzare un elementare programmino in vb.net che estragga 3 valori da una pagina WEB e li mostri in 3 caselle di testo.

    Questo è il link alla pagina: http://it.investing.com/equities/ubi-banca

    Questo è il codice contenente i valori:

    codice:
    <div id="tradeNowFloat" class="tradeNowFloat instrumentFloater js-floated-header-container">
        <div class="instrumentFloaterInner">
            <div class="float_lang_base_1 bold">
                <span class="arial_22">UBI</span>
                            <span id="fl_header_pair_lst" class="arial_16 midNum pid-342-last" dir="ltr">2,9580</span>
                            <span id="fl_header_pair_chg" class="arial_14 pid-342-pc redFont" dir="ltr">-0,0860</span>
                            <span id="fl_header_pair_pch" class="arial_14 pid-342-pcp redFont parentheses" dir="ltr">-2,83%</span>
            </div>
            <div class="headBtnWrapper inlineblock float_lang_base_2">

    Questi sono i tre valori da estrarre: "2,9580" "-0,0860" "-2,83%". I tre valori cambiano continuamente e, nel mio programmino, dovrebbero essere aggiornati ogni 5-10 secondi.

    C'è qualche volenteroso disposto ad aiutarmi?

    Attendo, grato e fiducioso.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    VB (tutte le versioni) viene trattato nel forum "Visual Basic e .NET Framework".

    Sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Cioè, fammi capire, vuoi dei semplici suggerimenti o tutto il codice pronto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    1
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    VB (tutte le versioni) viene trattato nel forum "Visual Basic e .NET Framework".
    Mi scuso per aver postato nella sezione sbagliata. In futuro farò più attenzione affinchè l'errore non si ripeta. Grazie per la comprensione e per non avermi redarguito malamente...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    1
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Cioè, fammi capire, vuoi dei semplici suggerimenti o tutto il codice pronto?
    So di essere sfacciato, ma il fatto è questo: sono alle primissime armi. Mi sto documentando, ma temo che l'apprendimento sarà cosa lunga.

    I suggerimenti sono quindi graditi, tuttavia se qualcuno mi confezionasse tutto il codice mi farebbe felice...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quote Originariamente inviata da aloisio Visualizza il messaggio
    So di essere sfacciato
    No ... il regolamento non lo consente ... comunque studia un po' le classi WebClient oppure il controllo WebBrowser e dai un'occhiata ad esempi che stanno su internet ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    devi dividere il problema in tre parti
    1) leggere una pagina web in una stringa
    2) estrarre i dati dalla stringa ottenuta
    3) temporizzare queste operazioni per ottenere i dati ad intervalli di tempo

    per il primo, anche senza conoscere l'inglese, ed essendo piuttosto scarso in ricerche, con google ho cercato una cosa del genere: vb.net load web page into string oppure c# load web page into string

    del milione di risultati la risposta già nella prima

    proponi del codice ed esponi i problemi: gli aiuti non mancheranno
    Pietro

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    1
    Quote Originariamente inviata da pietro09 Visualizza il messaggio
    devi dividere il problema in tre parti
    1) leggere una pagina web in una stringa
    Allora, sto seguendo le indicazioni di Pietro, che ringrazio. Per ora sono fermo al punto 1).
    Il codice seguente dovrebbe leggere la pagina WEB e caricarla in una stringa.

    codice:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            Using client = New WebClient()
                Dim result As String = client.DownloadString("http://www.google.com")
                MessageBox.Show(result)
            End Using
    
    End Sub

    Il problema è che talune pagine vengono lette senza problemi, mentre la pagina che interessa a me (http://it.investing.com/equities/ubi-banca) non viene caricata. Da buon profano non so capire il perché.

    Ho notato che, al caricamento, la pagina visualizza un pop-up pubblicitario. Che sia il pop-up ad impedirne la lettura? O la pagina incorpora qualche protezione?

    Sono arenato. Attendo qualche dritta per superare l'impasse...

    Grazie a tutti!
    Ultima modifica di aloisio; 17-06-2016 a 17:41

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    33
    Visto che era semplice e che ho da poco finito di lavorare a un progetto simile, sono stato buono e ti ho scritto tutto il codice, ma sappi che in realtà non si dovrebbe fare, comunque,
    per prima cosa aggiungi un webbrowser al form e modifichi:
    -la proprietà url su "http://it.investing.com/equities/ubi-banca"
    -la proprietà visible su false
    -la proprietà scripterrorssuppressed su true

    poi aggiungi tre label

    poi aggiungi un timer

    poi incolla questo codice in "class form1" (le scritte dopo l'apice(') sono commenti, il programma non li legge):

    codice:
        Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As                WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            Timer1.Interval = 5000 'imposta l'intervallo di tempo in millisecondi
            Timer1.Start() 'il timer parte
        End Sub
    
    
        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            Timer1.Dispose() 'il timer viene stoppato
    
    
            Dim variabile As String = "$(document).attr('title', $('#fl_header_pair_lst').text());"
            Dim eseguibile As String = [String].Format(variabile)
            WebBrowser1.Document.InvokeScript("eval", New String() {eseguibile})
            Label1.Text = WebBrowser1.Document.Title
            'viene eseguito un codice jquery all'interno del browser che cambia il titolo della pagina con il rpimo valore, successivamente si imposta il testo della label 1 = al titolo della pagina
    
    
            Dim variabile1 As String = "$(document).attr('title', $('#fl_header_pair_chg').text());"
            Dim eseguibile1 As String = [String].Format(variabile1)
            WebBrowser1.Document.InvokeScript("eval", New String() {eseguibile1})
            Label2.Text = WebBrowser1.Document.Title
            'qui accae lo stesso
    
    
            Dim variabile2 As String = "$(document).attr('title', $('#fl_header_pair_pch').text());"
            Dim eseguibile2 As String = [String].Format(variabile2)
            WebBrowser1.Document.InvokeScript("eval", New String() {eseguibile2})
            Label3.Text = WebBrowser1.Document.Title
            'qui accade lo stesso
    
    
            webbrowser1.navigate("http://it.investing.com/equities/ubi-banca")
            'la pagina viene ricaricata e la procedura ricomincia 
        End Sub
    ps. se modifichi i nomi dei controlli devi modificare anche il codice
    ci sono sicuramente modi migliori di risolvere il problema ma questo è il primo modo che mi è venuto in mente

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    34
    Ciao,so che è passato un mese dalla pubblicazione della discussione del forum,ma se non hai risolto ancora il problema,ti posso aiutare.
    Ora ti mando i codici:
    codice:
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            Try
                Label3.Visible = True
                Label3.Text = WebBrowser1.Document.All("last_last").InnerText
                Dim mioelemento As HtmlElementCollection = WebBrowser1.Document.All
                For Each miapaginaweb As HtmlElement In mioelemento
                    If miapaginaweb.GetAttribute("itemprop") = "name" Then
                        Me.Text = miapaginaweb.InnerText
                        Label1.Visible = True
                        Label1.Text = miapaginaweb.InnerText
                    End If
                    If miapaginaweb.GetAttribute("dir") = "ltr" Then
                        Label5.Visible = True
                        Label5.Text = miapaginaweb.InnerText
                        If Label5.Text.Contains("+") Then
                            Label5.ForeColor = Color.Green
                        Else
                            Label5.ForeColor = Color.Red
                        End If
                        WebBrowser2.Navigate("http://it.investing.com/equities/ubi-banca")
                    End If
                Next
            Catch ex As Exception
            End Try
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            WebBrowser1.ScriptErrorsSuppressed = True
            WebBrowser2.ScriptErrorsSuppressed = True
            Label2.Visible = True
        End Sub
    
        Private Sub WebBrowser2_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser2.DocumentCompleted
            Try
                Dim mioelemento2 As HtmlElementCollection = WebBrowser2.Document.All
                For Each miapaginaweb2 As HtmlElement In mioelemento2
                    If miapaginaweb2.GetAttribute("dir") = "ltr" Then
                        Label4.Text = miapaginaweb2.InnerText
                        If Label4.Text.Contains("+") Then
                            Label4.ForeColor = Color.Green
                        Else
                            Label4.ForeColor = Color.Red
                        End If
                        If Label4.Text.StartsWith("+") Then
                            Panel1.Visible = False
                            Label4.Visible = True
                            Timer1.Start()
                            Exit Sub
                        End If
                    End If
                Next
            Catch ex As Exception
            End Try
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            My.Settings.Timer += 1
            If My.Settings.Timer = 10 Then
                Timer1.Stop()
                My.Settings.Timer = "0"
                WebBrowser1.Refresh()
                Panel1.Visible = True
            End If
        End Sub
    Se vuoi poi ti posso mandare il programma che io ho creato,almeno hai un'aiuto in più.
    Attenzione però invece di utilizzare le textbox,ho usato le label. Ma non preoccuparti basta rimuovere le label e configurare le textbox è un lavoro facilissimo.
    Siccome c'è un problema con il sito web,ho utilizzato 2 web browser e in più la panel con il timer che indicano l'aggiornamento ogni 10 secondi. Dentro la panel c'è una label dove è scritto "IN AGGIORNAMENTO". Poi ti ricordo che se vuoi ridurre i tempi a 5 seconfi basta fare cosi:
    codice:
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            My.Settings.Timer += 1
            If My.Settings.Timer = 5 Then
                Timer1.Stop()
                My.Settings.Timer = "0"
                WebBrowser1.Refresh()
                Panel1.Visible = True
            End If
    Spero di esserti stato d'aiuto.Ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.