bibimeravilla96 (Normal User)
Pro
Messaggi: 79
Iscritto: 02/01/2012
|
Salve, sono nuovo del forum e sono quasi sicuro di aver sbagliato sezione, ma vi giuro che non sapevo dove postare,quindi vi chiedi scusa in anticipo se ho fatto questo, veniamo al dunque, allora vorrei fare un programma con Microsoft Visual Basic 2010 Express che prelevi i link da una pagina web e che metta in una ListBox i link trovati, sarebbe meglio se prendesse solo dei determinati link.
|
|
GN (Member)
Guru
Messaggi: 772
Iscritto: 30/04/2011
|
|
|
bibimeravilla96 (Normal User)
Pro
Messaggi: 79
Iscritto: 02/01/2012
|
Scusate ma sono un po inesperto,quindi non è che mi potreste postare un esempio...???
|
|
GN (Member)
Guru
Messaggi: 772
Iscritto: 30/04/2011
|
Ok te lo scrivo io un esempio:
Codice sorgente - presumibilmente VB.NET |
Dim wb As New WebBrowser() 'oggetto webbrowser, sarebbe un controllo windows forms per visualizzare pagine web ma qui lo usiamo solo per ricavare un HtmlDocument wb.Navigate("http:\\www.pierotofy.it") 'naviga con il webbrowser alla pagina che ti serve (da sostituire a pierotofy) Dim doc As HtmlDocument = wb.Document 'ricaviamo dal webbrowser questo HtmlDocument, un oggetto che consente di ottenere gli elementi della pagina web For Each link as HtmlElement In doc.Links 'per ogni elemento link nella pagina listbox1.Items.Add(link.Text) 'aggiungiamo alla listbox il testo del link Next
|
Per prendere solo determinati link, puoi filtrarli mettendo nel ciclo un IF che controlli che si attengano alle condizioni corrette.
|
|
bibimeravilla96 (Normal User)
Pro
Messaggi: 79
Iscritto: 02/01/2012
|
Grazie mille lo provo subito e vi faccio sapere..
|
|
bibimeravilla96 (Normal User)
Pro
Messaggi: 79
Iscritto: 02/01/2012
|
Ho provato il codice ma non va bene mi da 2 errori i seguenti:
|
|
ampeg (Normal User)
Pro
Messaggi: 124
Iscritto: 21/04/2011
|
ci ho messo un'oretta per venirne a capo ... comunque
Per prima cosa abbiamo bisogno di aggiungere al progetto l'oggetto COM "Microsoft HTML Object Library" dal quale useremo l'interfaccia "mshtml.HTMLAnchorElement" per ottenere l'informazione che ci interessa
per fare ciò bisogna selezionare "Aggiungi riferimento" dal menu "Progetto" (ps. io uso la versione in inglese di Visual Studio quindi non so se sono corretti i nomi dei menu)
una volta aperta la finestra dei riferimenti selezionare la scheda "COM" e cercare l'elemento "Microsoft HTML Object Library"... e aggiungerlo al progetto
nell'evento di un Button
Codice sorgente - presumibilmente VB.NET |
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 'Creiamo un nuovo oggetto WebBrowser Dim wb As New WebBrowser() 'Aggiungiamo l'handler all'oggetto creato 'Questo va fatto perché gli elementi del documento li abbiamo a disposizione solo dopo che il documento ha completato il caricamento della pagina AddHandler wb.DocumentCompleted, AddressOf wb_DocumentCompleted 'Carichiamo la pagina che ci interessa wb.Navigate("http:\\www.google.it") End Sub
|
aggiungiamo il codice nell'evento DocumentCompleted del nostro WebBrowser
Codice sorgente - presumibilmente VB.NET |
Private Sub wb_DocumentCompleted(sender As Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) 'sender è l'oggetto che ha generato l'evento, nel nostro caso il WebBrowser a cui abbiamo aggiunto l'handler, per poterlo usare dobbiamo fare una conversione esplicita con il CType 'ottengo gli elementi (per Links) contenuti nel documento For Each he As HtmlElement In CType(sender, WebBrowser).Document.Links 'l'informazione che ci serve è contenuta nell'interfaccia "mshtml.HTMLAnchorElement"... questa interfaccia, importata dall'oggetto COM che abbiamo inserito nel progetto, è "immagazzinata" come oggetto nella proprietà DomElement di ogni elemento presente nel documento 'per poterla utilizzare anche in questo caso dobbiamo fare una conversione esplicita tramite CType 'il dato utile contenente le informazioni dei link della pagina sono ricavati dalla proprietà "href" dell'interfaccia "mshtml.HTMLAnchorElement" ListBox1.Items.Add(CType(he.DomElement, mshtml.HTMLAnchorElement).href) 'la proprietà innerText, invece, contiene il testo associato al link 'ListBox1.Items.Add(CType(he.DomElement, mshtml.HTMLAnchorElement).innerText) Next End Sub
|
Ultima modifica effettuata da ampeg il 07/01/2012 alle 12:00 |
|
bibimeravilla96 (Normal User)
Pro
Messaggi: 79
Iscritto: 02/01/2012
|
Ok grazie mille provo subito....
|
|
GN (Member)
Guru
Messaggi: 772
Iscritto: 30/04/2011
|
Postato originariamente da bibimeravilla96:
Ho provato il codice ma non va bene mi da 2 errori i seguenti:
|
Credo che l'errore sia colpa del fatto che quando tenti di leggere l'HtmlDocument il webbrowser non ha ancora caricato la pagina (scrivendo di fretta non avevo tenuto conto di questo fatto); facendo come ti ha suggerito ampeg dovresti risolvere. Aggiungo che secondo me non c'è bisogno di importare mshtml (che occupa circa 9 MB) perchè basta leggere l'attributo href del tag <A> con il metodo GetAttribute ( http://msdn.microsoft.com/it-it/library/system.windows.for ...:
Codice sorgente - presumibilmente Plain Text |
ListBox1.Items.Add(he.GetAttribute("href"))
|
Ultima modifica effettuata da GN il 07/01/2012 alle 13:02 |
|