[Risolto] [BeautifulSoup] Parsing sito: tag span sparito

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

[Risolto] [BeautifulSoup] Parsing sito: tag span sparito

Messaggioda vaeVictis » sabato 5 gennaio 2019, 6:44

Ciao a tutti.
Sto facendo il parsing e l'estrazione di dati da questo calendario

Il parsing in sè fila abbastanza liscio, con l'aiuto di BeautifulSoup e altri moduli.

Quello su cui mi sto intoppando è un particolare tag span.
Questo tag span è presente nel sorgente del sito, se lo visualizzo con la funzione ispeziona di Chromium; scompare se invece uso la funzione visualizza sorgente.
Inoltre, nel contenuto parsato con BeautifulSoup non è presente.

Faccio un esempio.
I record su cui mi sto concentrando sono le righe del calendario.
Il codice completo di una di queste righe (una delle righe dispari, solo perché alterna la colorazione e i codici sono leggermente diversi) è "visto" nel seguente modo da BeautifulSoup e dalla funzione "visualizza sorgente pagine"
Codice: Seleziona tutto
        <div class="ec-table__item">
            <div class="ec-table__group-left">
                <div class="ec-table__col ec-table__col_time">
                    <div>01:00</div>
                </div>
                <div class="ec-table__col ec-table__col_currency">CNY</div>
            </div>
            <div class="ec-table__group">
                <div class="ec-table__col ec-table__col_event">
                   
                    <a href="/en/economic-calendar/china/manufacturing-pmi">Manufacturing PMI</a>
                   
                </div>
                <div class="ec-table__group-right">
                    <div class="ec-table__col ec-table__col_actual">49.4</div>
                    <div class="ec-table__col ec-table__col_forecast">49.8</div>
                    <div class="ec-table__col ec-table__col_previous">50</div>
                </div>
            </div>
        </div>


Se invece uso la funzione ispeziona, il codice ha una parte in più
Codice: Seleziona tutto
<span class="ec-table__importance ec-table__importance_low"></span>

subito dopo la chiusura del div con l'ora alla quarta righa.

Qualcuno per cortesia mi spieghi il mistero. Io non sto capendo.
Ultima modifica di vaeVictis il domenica 6 gennaio 2019, 11:41, modificato 1 volta in totale.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4135
Iscrizione: luglio 2012
Desktop: Gnome
Distribuzione: Ubuntu/Lubuntu 18.04.1 64bit

Re: [BeautifulSoup] Parsing sito: tag span sparito

Messaggioda melfnt » sabato 5 gennaio 2019, 23:13

Ciao! Finalmente per una volta sono io che aiuto te (spero :P )

Anche io riscontro lo stesso problema, azzardo un'ipotesi: probabilmente quel div è creato dinamicamente dal Javascript, quindi se scarichi semplicemente il codice della pagina non lo vedi, mentre "ispeziona elemento" ti mostra il dom così com'è nell'istante che apri gli strumenti di sviluppo.

:)
melfnt
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1312
Iscrizione: ottobre 2011

Re: [BeautifulSoup] Parsing sito: tag span sparito

Messaggioda vaeVictis » domenica 6 gennaio 2019, 11:41

Grazie. Hai confermato i sospetti che avevo leggendo poi qualcosa online sui siti web, di cui capisco poco.

Penso che la discussione sia risolta. Ho cambiato sito :)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4135
Iscrizione: luglio 2012
Desktop: Gnome
Distribuzione: Ubuntu/Lubuntu 18.04.1 64bit

Re: [BeautifulSoup] Parsing sito: tag span sparito

Messaggioda melfnt » domenica 6 gennaio 2019, 15:15

vaeVictis Immagine ha scritto:Grazie. Hai confermato i sospetti che avevo leggendo poi qualcosa online sui siti web, di cui capisco poco.

Penso che la discussione sia risolta. Ho cambiato sito :)


Quando si dice: "se Maometto non va alla montagna"...

Comunque, in questi casi puoi fare in due modi:
1) Usare un tool che include un motore javascript e quindi simulare il browser e poi fare il parsing della pagina normalmente.
2) Capire come fa il javascript a "popolare" il dom e cercare di rieseguire la procedura per ottenere i dati che ti servono.

La soluzione 1) funziona sempre ma talvolta può essere scomodo perché magari non vuoi distribuire un browser con la tua applicazione :)
La soluzione 2) funziona con i siti che non "nascondono" i propri dati (non funzionerebbe con Amazon, per esempio).

Io di solito apro la console di sviluppo alla pagina "rete" e guardo il tab XHR (XmlHttpRequest è uno standard per eseguire richieste HTTP dal javascript e poi elaborarne i responsi). Se sei fortunato, c'è una pagina usata come API che fornisce dati al javascript della pagina che stai visitando, che li elabora e li usa per popolare il sito.
Il bello è che se l'API è fatta bene, i dati che puoi ottenere da lì sono in formato JSON o XML ancora più facili da parsare rispetto all'XML della pagina stessa.

Nel caso del calendario che hai linkato nel primo post sei fortunato: dalla scheda "rete" della console di sviluppo si notano delle richieste XHR a url come questa: https://www.mql5.com/en/economic-calend ... encies=511
Puoi prendere da lì i dati che ti servono invece che dal DOM, cambiando i parametri GET a seconda del periodo che ti serve, per esempio.

(:
melfnt
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1312
Iscrizione: ottobre 2011

Re: [Risolto] [BeautifulSoup] Parsing sito: tag span sparito

Messaggioda vaeVictis » lunedì 7 gennaio 2019, 10:59

Grazie per le indicazioni :)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once, but I fear the man who has practiced one kick 10000 times.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 4135
Iscrizione: luglio 2012
Desktop: Gnome
Distribuzione: Ubuntu/Lubuntu 18.04.1 64bit


Torna a Programmazione

Chi c’è in linea

Visualizzano questa sezione: 0 utenti registrati e 3 ospiti