Estrapolare parte di testo da pagina HTML

giovedì 01 ottobre 2009 - 00.31

hellobrozz Profilo | Newbie

Ciao a tutti ragazzi,

sono incappato in piccolo blocco di logica. Ho una pagina HTML contenente il normale sorgente di una pagina HTML, head, body, div, paragrafi ecc. All'interno di essa ho alcune tabelle.
Dovrei estrarre solo una determinata tabella, tutta quanta (in maniera tale poi da convertirla in XML e gestirla come voglio con i DataSet).

Ho pensato ad un ciclo con StreamReader che legge ogni singola riga e controlla se la riga è composta da <table... , però non penso sia la soluzione migliore, oltre il fatto che mi da qualche problema.

Qualcuno sa darmi una dritta? :)
Grazie

alexmed Profilo | Guru

Ciao
Prova a dare un'occhiata alla Classe HtmlDocument

http://msdn.microsoft.com/it-it/library/system.windows.browser.htmldocument(VS.95).aspx

Ciao

alexmed

hellobrozz Profilo | Newbie

CIao,

la sto gia utilizzando... ma non serve a fare cio di cuiho bisogno :(

luigidibiasi Profilo | Guru

Sempre in riferimento a HTMLDocument....

Che nome ha la tabella nella pagina ... come vuoi recuperarla tramite id name o class?

Ricordo una proprietà innerHTML utilizzabile, da richiamare sugli oggetti recuperati tramite getElementByID ... prova a vedere se fà al caso tuo.
Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

hellobrozz Profilo | Newbie

Ci sono più tabelle nella pagina, ho la fortuna che la tabella che voglio recuperare utilizza una class css

<table class="mod_market">

Ora il dubbio è: Recupero tutta la tabella, anche con intestazioni o solo i dati, partendo quindi dal td sottostante?

<td class="header" colspan="8" >Baseload</td>
</tr>
<td>
INIZIO DATI DA RECUPERARE????

Questo è un altro piccolo dubbio che mi affligge.

alexmed Profilo | Guru

Ciao
Qui c'è proprio un esempio di quello che vuoi fare

http://msdn.microsoft.com/it-it/library/system.windows.forms.htmldocument.getelementbyid.aspx

Ciao
alexmed

hellobrozz Profilo | Newbie

Grazie Alex...

buona idea, non ci avevo pensato.
Mi rimane il problema di...capire come prelevare SOLO quella data tabella (e i dati); putroppo il sito è costruito con un sistema tabellare...

Avete idea di come si possa 'grabbare', 'prelevare' una sola parte di un solo sorgente html, file di testo, ecc? in maniera tale che quando lo scarico da internet isolo automaticamente la tabella e il tutto rimane piu facile e gestibile?

Grazie ancora

hellobrozz Profilo | Newbie

Come immaginavo... il get element by id preleva l'id del DOM della pagina HTML.
Non ho alcun ID che mi identifica la tabella... dovrei andare a leggere i td e tr e trovare il valore.

Più tardi provo ma temo non ci siano grosse soluzioni!

luigidibiasi Profilo | Guru

bhe puoi farti un getElementByName ( se ha il name ) o tagName passando il tag table in modo da restringerti il campo di ricerca... ma a questo punto credo che tu abbia solo class


Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

hellobrozz Profilo | Newbie

Non ho il name, putroppo è un codice HTML scritto veramente male e non posso metterci mano.
Passando un tagName... cosa intendi di preciso? Una stringa intera del tipo <table class="name...." ?

Non ho solo class... DIPENDE :)
All'inizio della tabella si, altrimenti no. Forse è meglio che pubblico il sorgente HTML della table intera...

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ovviamente è stato tagliato... 10 righe.
In poche parole devo prelevare tutto da baseload escluso :(

luigidibiasi Profilo | Guru

>Non ho il name, putroppo è un codice HTML scritto veramente male
>e non posso metterci mano.
>Passando un tagName... cosa intendi di preciso? Una stringa intera
>del tipo <table class="name...." ?

Recuperare esclusivamente le <table> dalla pagina

dim tableElem As HtmlElement = HTMLDocument.GetElementsByTagName("table")

in questo modo ti restituisce element di tipo table ... se riesci ad identificare quella che ti server usi innerHTML per recuperarne il contenuto.




Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

hellobrozz Profilo | Newbie

Mumble... più tardi provo questa soluzione.
Intanto sopra ho pubblicato parte del sorgente HTML della tabella... cosi ti rendi conto con la schifezza che ho a che fare... ma io dico, un id no? :(

hellobrozz Profilo | Newbie

Mumble... niente; devo utilizzare l'oggetto webbrowser e non posso utilizzare il get by name ... in quanto i due tipi di dato sono diversi...

luigidibiasi Profilo | Guru

>Mumble... più tardi provo questa soluzione.
>Intanto sopra ho pubblicato parte del sorgente HTML della tabella...
>cosi ti rendi conto con la schifezza che ho a che fare... ma
>io dico, un id no? :(

io ho caricato quel codice in un webbbrowser (la tabella tra il tag BODY) e l'ho recuperata in questo modo...
(cliccando su un button)



Dim it As HtmlElement
Dim w As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("table")
Dim theHtml As String = Nothing
For Each it In w

' la nostra tabella

>>quel contains non mi piace tanto ma è x fare subito... devi solo sperare che non ci siano altri elementi >>con mod_market come class inseriti

If it.OuterHtml.Contains("class") And it.OuterHtml.Contains("mod_market") Then
theHtml = it.OuterHtml
End If

Next it
If Not IsNothing(theHtml) Then
MsgBox(theHtml)
End If


Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

alexmed Profilo | Guru

http://msdn.microsoft.com/it-it/library/system.windows.forms.htmlelement.getattribute.aspx

alexmed

hellobrozz Profilo | Newbie

La provo subito. Vedo cosa mi restituisce :)
Grazie per la pazienza per il momento un + a tutta la community

hellobrozz Profilo | Newbie

Grazie Alex, stavo considerando anche il GetAttribute.
Ora faccio alcuni 'test' e tempo mezz'ora vi faccio sapere come è andata.

Se fila liscio come l'olio vi offrò una pizza

hellobrozz Profilo | Newbie

Effettivamente in quella pagina riesco a prelevare TUTTA la tabella.
Ora devo solamente salvarmela sul file (sovrascrivere quello precedente) ed estraporlarla in xml :) (ho visto che ce tutta una classe).

Scusate ma uso dot net da circa 5 mesi e alcune funzionalità ancor anon le ho scoperte!
Grazie ancora vi farò sapere ;9

alexmed Profilo | Guru

Non l'ho mai usata ma:

http://msdn.microsoft.com/it-it/library/system.xml.xmldocument_members(VS.80).aspx
http://msdn.microsoft.com/it-it/library/system.xml.xmldocument.writeto(VS.80).aspx

dovrebbe fare al caso tuo, penso addirittura senza passare da un file txt.


alexmed

hellobrozz Profilo | Newbie

Si la conosco :)
Il problema era ISOLARE la tabella html.
Preferisco salvarmela però, perche necessito di controllare un dato :)

hellobrozz Profilo | Newbie

BINGO, tabella salvata con ottimizzazione del codice (ho evitato un passaggio inutile)
Ora vediamo come procede l'export to xml
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5