<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sto tentando di (legalmente) importare i dati sportivi da un sito web (es. Risultati delle Paralimpiadi del 2012 a Londra). Il sito pubblico invia query al database IPC e restituisce una pagina in HTML con numerose tabelle, a seconda della combinazione di: Concorso (Paralimpiadi di Londra); Sport (atletica leggera); Genere (F); Evento (100 m); Classe AWD (F37); che include una tabella separata per ogni fase della competizione (batterie / semifinali / finali) e numero di calore. Ci sono circa 20 classi AWD per evento e solitamente <20 tabelle per pagina, a seconda della popolarità dell'evento. Per automatizzare parzialmente questo in JMP, ho uno script di circa 360 (= 20x 18) istruzioni "Open" del modulo:
Aperto(
" http://www.paralympic.org/ipc_results/results.php?competition=2004PG&gender=m&sport=athletics&discipline=&event=100%20m&eclass=T11 ",
Tabella HTML (3)
);
per il gruppo maschile F11 (cieco) di 100 m (la terza tabella sulla pagina). Quindi concatenare i tavoli prodotti ripetendoli per tutti gli eventi. Il mio problema è che sebbene questo processo funzioni correttamente per lo script che consente 20 tabelle per classe (concatenando 20 delle precedenti istruzioni); quando tento di includere tutti e 18 gli eventi (360 = 20 x 18), l'esecuzione si arresta senza errori dopo il primo evento (ad esempio 100 m) e non produce output per l'evento successivo (200 m). Questo perché ci sono solo 12 tavoli in questa combinazione evento / classe (non credo), o qualche altro problema? (Sto usando un 4 core, 64 bit con 16 GB di RAM, con WinXP in esecuzione).
Apprezzerei i consigli di chiunque altro che abbia esperienza nell'utilizzare la scelta "Internet Open" sul Web.
Non sono sicuro del motivo per cui si rompe, ma potrebbe essere dovuto al fatto che la connessione di rete è sempre più lenta quando il numero di richieste è elevato. O che una richiesta non riesce per un altro motivo.
Concatenate tutte le tabelle contemporaneamente o una alla volta (e quindi chiudete la tabella sorgente)? Quest'ultimo approccio richiede meno dal tuo computer.
Il codice qui sotto sembra funzionare, anche se l'elenco degli eventi si espande ben oltre i due eventi nell'esempio (io uso JMP 10 per Mac e ho una connessione di rete piuttosto veloce). Ho usato Try () per evitare un arresto nel caso in cui ci fossero meno di 20 tabelle per pagina.
dt = Nuova tabella ( "Tutti i risultati" , Nuova colonna ( "Tabella delle fonti" , Personaggio ) ) ;
EVENT_LIST = { "100" , "400" } ; // Solo due eventi in questo esempio
Per ( io = 1 , io <= N articoli ( EVENT_LIST ) , io ++,
Provare ( // Escape loop se non ci sono più tavoli per questo evento
Per ( j = 1 , j <= 20 , j ++,
// Prova (Chiudi (dt1, nessun salvataggio)); // Chiudi la sottotabella precedente (se presente)
dt1 = Aperto (
" http://www.paralympic.org/ipc_results/results.php?competition=2004PG&gender=m&sport=athletics&discipline=&event= "
|| EVENT_LIST [ io ] || "% & 20m eclass = T11" ,
Tabella HTML ( j )
) ;
Aspettare ( 0 ) ; // Fornire a JMP la possibilità di completare il download, aumentare l'argomento se la rete è lenta
dt1 << imposta nome ( EVENT_LIST [ io ] || "_tavolo" || carbonizzare ( j ) ) ;
col = dt1 << Nuova colonna ( "Tabella delle fonti" , personaggio ) ;
Per ogni riga ( dt1 : col = ( dt1 << prendi il nome ) ) ;
dt << concatenare ( dt1 , Aggiungi alla prima tabella ( 1 ) ) ;
Vicino ( dt1 , nessun salvataggio ) ; // Chiudi sottotabella
)
)
) ;