|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2008
Città: Paderno Dugnano
Messaggi: 116
|
Estrazione dati da sito web - linguaggio
Ciao a tutti, ho bisogno di estrarre una serie di dati da un sito web ed eventualmente trasferirli in un file o in excel e vorrei un consiglio sul linguaggio di programmazione dal quale partire.
In secondo luogo leggendo altri thread qua e là ho visto che vi sono dei problemi se la pagina in questione è dinamica, potetreste darmi delle delucidazioni a ruguardo? Grazie anticipatamente, Andrea.
__________________
Intel Core Duo E8400 - Asus P5Q - Corsair XMS2 DHX CM2X2048-6400C4DHX- ATI Radeon HD 4850 - Samsung SyncMaster 206BW - Gigabyte GZ-X5 - Corsair 550VXEU - Microsoft Windows 7 Professional |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jun 2008
Città: Torino
Messaggi: 118
|
puoi risolvere il tuo problema con un parse html se il sito e' scritto in html. puoi usare python, php, java, dipende da cosa conosci. parserizzare l'html e' una porta a rompimenti di balls enormi, questo se il tuo sito non offre i dati in json o xml.
per il fatto del sito dinamico non ci dovrebbero essere problemi. ovviamenti avrai dati diversi in base al istante in cui raccogli i dati dal sito. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jan 2008
Città: Paderno Dugnano
Messaggi: 116
|
ok, grazie per la risposta! se lo scrivo in php poi basta che apro il file .php che creo e da lì posso per esempio creare un bottone che una volta schiacciato esegue quello che devo fare giusto?
Hai invece qualche funzione da consigliarmi per questo scopo?
__________________
Intel Core Duo E8400 - Asus P5Q - Corsair XMS2 DHX CM2X2048-6400C4DHX- ATI Radeon HD 4850 - Samsung SyncMaster 206BW - Gigabyte GZ-X5 - Corsair 550VXEU - Microsoft Windows 7 Professional |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
sarebbe forse sensato chiederti che esperienza di programmazione hai
lo scraping non è certo qualcosa di banale e non è raro dover modificare il parser per ottenere buoni risultati io ho sempre usato python + beautifulsoup che imho è il sistema più robusto per effettuare lo scraping di contenuti dal codice html |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jan 2008
Città: Paderno Dugnano
Messaggi: 116
|
bè diciamo che di php ho una buobna conoscenza, l'ho usato per l'università per qualche same con apache e mysql... di python invece non so niente...
Usando php sapreste dirmi quindi da dove partire? Se è necessario usare qualche altro linguaggio o qualche funzione specifica? Grazie
__________________
Intel Core Duo E8400 - Asus P5Q - Corsair XMS2 DHX CM2X2048-6400C4DHX- ATI Radeon HD 4850 - Samsung SyncMaster 206BW - Gigabyte GZ-X5 - Corsair 550VXEU - Microsoft Windows 7 Professional |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
il problema è che in php lo scraper te lo devi creare tu, mentre con python c'è già beautifulsoup che implementa il 99.99% di quello che ti serve
il discorso scraping è molto complesso, nel senso che non tutti i siti là fuori usano html scritto correttamente, moltissimi sono scritti male, con errori, omissioni, ecc.... un buon parser html implementa una serie di logiche euristiche che ti permettono di correggere il codice al volo e quindi di bypassare gli errori che i coder html mettono nei loro siti in php sei praticamente da solo, in python hai beautifulsoup chiaramente se devi fare il parsing di un singolo sito, allora ti vai a guardare il codice html e vedi se e dove ci sono errori e quindi riesci bene o male a creare un parser che funziona, ma se vuoi un parser per leggere vari siti html di cui non puoi ovviamente annotare tutti i difetti, devi appoggiarti a qualcosa di robusto in teoria i migliori parser in assoluto sono quelli dei browser, tra cui quello di firefox è uno dei migliori.....ovviamente puoi interfacciarti con firefox, preferibilmente da python perchè ci sono dei wrapper appositi, oppure puoi interfacciarti a webkit, o se vuoi farla semplice usi beautifulsoup |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Jan 2008
Città: Paderno Dugnano
Messaggi: 116
|
Quote:
__________________
Intel Core Duo E8400 - Asus P5Q - Corsair XMS2 DHX CM2X2048-6400C4DHX- ATI Radeon HD 4850 - Samsung SyncMaster 206BW - Gigabyte GZ-X5 - Corsair 550VXEU - Microsoft Windows 7 Professional |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
curl permette di scaricare le pagine html, ma ovviamente non indicizza il DOM
del resto in php puoi benissimo usare file_get_contents ( se ovviamente nel php.ini hai abilitato la funzionalità di lettura di file remoti ) e quindi curl ti serve a ben poco se si tratta sempre dello stesso sito allora puoi creare un banale scraper usando le espressioni regolari |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Jan 2008
Città: Paderno Dugnano
Messaggi: 116
|
cosa vuol dire che non indicizza il DOM?
Più che altro come faccio a selezionare una riga piuttosto che un'altra o dei determinati valori? Ci sono delle funzioni apposite? E' possibile inoltre spostarsi fra le pagine del sito in modo automatico? Grazie ancora per le risposte.
__________________
Intel Core Duo E8400 - Asus P5Q - Corsair XMS2 DHX CM2X2048-6400C4DHX- ATI Radeon HD 4850 - Samsung SyncMaster 206BW - Gigabyte GZ-X5 - Corsair 550VXEU - Microsoft Windows 7 Professional |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
vedi di qua, oppure la più completa versione in lingua inglese, di la.
Comunque credo che pabloski ti stia suggerendo accedere alla pagina html che ti interessa come ad uno stream dati: puoi (ad esempio, ma non solo, caricarla tutta in memoria e vederla come una unica stringa per poi) darla in pasto ad un matcher di regular expression al quale passerai dei pattern per estrarre i match che ti interessano. Altrimenti analizzi linea per linea il contenuto per farci quello che ti pare.
__________________
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) Ultima modifica di banryu79 : 13-11-2010 alle 20:50. |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Jan 2008
Città: Paderno Dugnano
Messaggi: 116
|
ok, ho capito cos'è il DOM, ma il fatto che non lo poassa indicizzare cosa comporta in termini pratici?
__________________
Intel Core Duo E8400 - Asus P5Q - Corsair XMS2 DHX CM2X2048-6400C4DHX- ATI Radeon HD 4850 - Samsung SyncMaster 206BW - Gigabyte GZ-X5 - Corsair 550VXEU - Microsoft Windows 7 Professional |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
prendiamo beautifulsoup che è un modulo python che serve proprio a creare il DOM partendo dal codice html....tu gli passi come parametro una stringa che contiene il codice html, lui internamente si crea una struttura di varia complessità che rappresenta il documento ad esempio <html><body><h1>Ciao Pippo</h1><p>Io sono un cane</p></body></html> il DOM si presenterà fatto così html --> body --> h1 --> Ciao Pippo --> p --> Io sono un cane in pratica avrai un vettore che chiamiamo S per semplicità e avrai che S[0] contiene il contenuto di <html> e cioè il body e tutti gli elementi al suo interno S[0][0] sarà un vettore di 2 elementi contenente h1 e p e i loro contenuti S[0][0][0] sarà Ciao Pippo e S[0][0][1] sarà Io sono un cane ovviamente il tutto associato a metadati che permettono di capire se il contenuto di un elemento dell'array è un elemento html, una semplice stringa di testo, un elemento cdata, ecc.... questo è il genere di struttura che si chiama DOM, poi ovviamente ogni libreria la gestisci fisicamente a modo suo ma concettualmente il DOM è una struttura contenente il codice html, sezionato in base ai vari tag, dov'è possibile navigare all'interno dei tag e quindi scoprire/leggere gli elementi contenuti all'interno dei vari tag, scendere ancora più sotto, fino ad arrivare agli elementi atomici che sono le stringhe di testo per fare lo scraping di una pagina html ti serve qualcuno che sia in grado di creare una struttura del genere in alternativa puoi semplicemente creare un matcher con le espressioni regolari, che però sarà un sistema che brutalmente estrae tutte le stringhe di testo ma non ti dà nessuna informazione riguardo lo status di quelle stringhe ( se erano contenute all'interno di tabelle, div, header, paragrafi, erano bold, em o che altro ) l'approccio basato su espressioni regolari funziona finchè il codice è corretto, ma guai ad avere un codice in cui un tag non si chiude oppure c'è un errore sintattico ( tipo <b al posto di <b> )....in questo caso il matcher comincerà a restituire stringhe di testo con dentro tag html e sarà un guaio grosso quanto una casa in generale siccome è impossibile creare un parser degno di tale nome in maniera semplice, il mio suggerimento è di appoggiarsi ai parser di webkit o gecko, perchè si tratta di software molto sofisticato, capace di generare il DOM a partire da html malridotto |
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Jan 2008
Città: Paderno Dugnano
Messaggi: 116
|
grazie mille per la spiegazione esauriente. Ora provo a vedere se riesco a fare qualcosa in php, magari per quello che devo fare non c'è bisogno di cose troppo complesse, in tal caso invece proverò o con python o come dici tu usando quei parser.
Grazie ancora
__________________
Intel Core Duo E8400 - Asus P5Q - Corsair XMS2 DHX CM2X2048-6400C4DHX- ATI Radeon HD 4850 - Samsung SyncMaster 206BW - Gigabyte GZ-X5 - Corsair 550VXEU - Microsoft Windows 7 Professional |
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Jan 2008
Città: Paderno Dugnano
Messaggi: 116
|
Scusate il doppio post, sto facendo qualche prova con php, usando funzioni semplici come la file get content. Purtroppo quando uso questa funzione inserendo l'url del sito desiderato ottengo quest'eerore:
[function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in C:\xampp\htdocs\prova2.php on line 7 forse è dovuto al fatto che l'url in questione non termina con una pagina .php o .html o che fa uso i script? perchè ho visto che nel sorgente della pagina ve ne sono...
__________________
Intel Core Duo E8400 - Asus P5Q - Corsair XMS2 DHX CM2X2048-6400C4DHX- ATI Radeon HD 4850 - Samsung SyncMaster 206BW - Gigabyte GZ-X5 - Corsair 550VXEU - Microsoft Windows 7 Professional |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quel messaggio ti dice semplicemente che il server non è in grado di elaborare la richiesta. Il problema non è dello script ma del server.
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Jan 2008
Città: Paderno Dugnano
Messaggi: 116
|
quindi vuol dire che da quel sito non è possibile in nessun modo estrarre dati dal codice sorgente?
__________________
Intel Core Duo E8400 - Asus P5Q - Corsair XMS2 DHX CM2X2048-6400C4DHX- ATI Radeon HD 4850 - Samsung SyncMaster 206BW - Gigabyte GZ-X5 - Corsair 550VXEU - Microsoft Windows 7 Professional |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
|
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Jan 2008
Città: Paderno Dugnano
Messaggi: 116
|
l'url dal browser funziona, è da lì che l'ho preso. Cosa può essere allora?
__________________
Intel Core Duo E8400 - Asus P5Q - Corsair XMS2 DHX CM2X2048-6400C4DHX- ATI Radeon HD 4850 - Samsung SyncMaster 206BW - Gigabyte GZ-X5 - Corsair 550VXEU - Microsoft Windows 7 Professional |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:08.




















