|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2004
Città: Brescia
Messaggi: 544
|
[C#] Parser dati pagina web
Ciao ragazzi, dovrei realizzare un programmino che data una pagina web (asp) va a recuperare alcuni valori per fare dei confronti.
Prendo per esempio questa pagina: http://www.italianbulls.com/StockList.asp Nello specifico mi interessa leggere i dati contenuti nelle pagine di alcuni dei "Ticker" in elenco per salvarmeli in una dt ad esempio. I valori da salvare (prendendo per esempio il primo Ticker in elenco: http://www.italianbulls.com/StockPag...er=Milan&Typ=S) sono il suo nome "A2A.MI", il suo valore attuale "0.4117" (indicato in grassetto blu in alto a dentra circa vicino al nome) e il suo valore precedente (data e prezzo) recuperato dalla prima riga della tabella "Two-Year Signal History " di destra. Qualcuno mi saprebbe dare delle dritte? Grazie mille
__________________
- M@']['']['eo - |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2004
Città: Brescia
Messaggi: 544
|
UP!
__________________
- M@']['']['eo - |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2004
Città: Brescia
Messaggi: 544
|
UP
__________________
- M@']['']['eo - |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Il risultato di quella pagina ASP produce un Document HTML e chiaramente i dati sono strutturati in una Table.
Il problema di estrapolare dati automaticamente da un flusso HTML è un classico. In .NET una delle vie più rapide è una semplice Application Windows Forms con un controllo WebBrowser. Sulla mia Pagina FaceBook ho inserito di recente 3 Articoli con codice funzionante sull'uso avanzato del controllo WebBrowser, con particolare attenzione al problema del parsing : 1. https://www.facebook.com/notes/marco...66660770012070 2. https://www.facebook.com/notes/marco...76016835743130 3. https://www.facebook.com/notes/marco...77982925546521 La 1. in pratica è la risposta ad un quesito identico al tuo. Il codice è VB 2010, ma portarlo in C# è molto semplice... ![]()
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ] Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ] |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Dec 2004
Città: Brescia
Messaggi: 544
|
Graazie mille della dritta.
Ho però un problema che mi blocca... Dopo aver recuperato con .GetElementsByTagName("td") i vari tag, nel ciclo successivo recuperi il valore se TDs(i).OuterHtml.Contains(testTD) dove testID è praticamente quanto specificato nel Class del tag. Nel mio caso all'interno del OuterHtml i tag TD non sono identificati da un Class specifico ma so che posso accedere a quello di mio interesse perchè il testo HTML specifico è: <td height="60" valign="top"><font size="6" color="GRAY" valign="top"><b>WAIT<br></b></font></td> Sai per caso darmi un'ulteriore dritta su come recuperare quekl tag e leggere il valore WAIT? Grazie mille. Quote:
__________________
- M@']['']['eo - |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Dec 2004
Città: Brescia
Messaggi: 544
|
Ah dimenticavo, la pagina di esempio è http://www.italianbulls.com/StockPag...er=Milan&Typ=S.
Potrebbe essere che il campo da leggere abbia un valore diverso durante la giornata... Quote:
__________________
- M@']['']['eo - |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Attenzione che fare web scraping delle pagine di un sito potrebbe essere illegale.
(link)
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
|
Quote:
- html agility pack - watin dipende dalla complessità delle pagine, per quello che hai menzionato la prima soluzione è più che sufficiente ps il sito da te citato, cos'è? |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Dec 2004
Città: Brescia
Messaggi: 544
|
Grazie della risposta.
Stò provando con html agility pack ma non riesco a recuperare il valore desiderato in nessun modo. A partire dall'html recuperato provo ad accedere con xpath ma nulla. Ho postato anche alla community del progetto cercando uno spunto. Ti mando pm con dettagli magari tu sei più ferrato e se hai 2 minuti magari mi illumini. Grazie mille.
__________________
- M@']['']['eo - |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
|
Quote:
le domande meglio farle qui, potrebbero tornare utili a qualcun altro. Non ho capito perchè mi hai mandato il link alla community del framework che ti ho consigliato, posta il codice che lo vediamo assieme. |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Dec 2004
Città: Brescia
Messaggi: 544
|
Vorrei recuperare il valore di un tag all'interno di una pagina.
Utilizzando Agility Pack sono arrivato a questo punto: Codice:
public static HtmlDocument ParseHtml(string URL) { HtmlDocument hDoc = new HtmlDocument(); try { WebClient wClient = new WebClient(); byte[] bData = wClient.DownloadData(URL); hDoc.LoadHtml(ASCIIEncoding.ASCII.GetString(bData)); } catch { hDoc.LoadHtml(""); } return hDoc; } HtmlAgilityPack.HtmlDocument htmldoc = ParseHtml(url); Per leggere il valore specifico tento di accedere con il metodo SelectNodes passando come argomento il percorso specifico nel sorgente con xpath (recuperato con firebug + firepath): Codice:
HtmlNode hNode = htmldoc.DocumentNode.SelectNodes("/html/body/table/tbody/tr/td/table[5]/tbody/tr/td/table/tbody/tr/td[4]/table/tbody/tr[2]/td/table/tbody/tr/td/font") Il sorgente della pagina non è bellissimo e c'è pure un errore restituito dal parser alla riga 157 relatino ad un tag <font> non aperto. Per l'esempio la pagina da cui leggere il dato è http://www.italianbulls.com/StockPag...er=Milan&Typ=S Il valore da recuperare è BUY...attenzione che può cambiare nel tempo e può essere BUY-IF, SELL, SELL-IF, HOLD e cambiare di colore di conseguenza.
__________________
- M@']['']['eo - |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Dec 2004
Città: Brescia
Messaggi: 544
|
Nessun consiglio?
__________________
- M@']['']['eo - |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Dec 2004
Città: Brescia
Messaggi: 544
|
up
__________________
- M@']['']['eo - |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:17.