[Risolto] [Python] Stranezza nell'ora letta dal codice html

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

[Risolto] [Python] Stranezza nell'ora letta dal codice html

Messaggioda vaeVictis » lunedì 7 gennaio 2019, 21:23

Ciao a tutti.

Sto sperimentando una "stranezza" nello scraping di info da un sito (tutta roba che si può fare, ci tengo a specificarlo data la vastità di quello che si può fare con lo scraping).

In parole povere, leggo il codice html di un sito con mechanize.
Successivamente con BeautifulSoup analizzo la struttura del codice e prendo alcune cose che mi interessano.

Tutto a posto... tranne che per l'ora.
Cambia tutte le ore lette: rispetto all'ora che compare nel codice html, mi viene letto come se fosse un'ora indietro. Nel senso che se sul sito mostra le 8 il mio programma la vede come fossero le 7.

Ho fatto l'analisi del codice con gli strumenti di Chromium.
Ho provato a fare il parse del codice html letto da file dopo averlo messo a mano e aver controllato le ore.
Ma niente da fare.

Avrei bisogno di una mano
(e anche di una nuova gamba di legno :D )

Grazie in anticipo
:ciao:
Ultima modifica di vaeVictis il domenica 13 gennaio 2019, 10:58, 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: [Python] Stranezza nell'ora letta dal codice html

Messaggioda nuzzopippo » martedì 8 gennaio 2019, 5:37

Anche confessando che non ho la più pallida idea di ciò che Ti serve, la butto li : Fuso orario?

Dico ciò perché mi sono accorto, da molto tempo, che l'orario riportato da questo forum per un mio intervento è spostato di un'ora rispetto all'inserimento.

Forse l'hai considerato già ma personalmente vedrei se mi riesce di trovare i riferimenti GTM adottati nel sistema consultato e compensare ... come ciò possa essere fatto non ne ho idea al momento.
Altra possibilità correlata : non è che i processi con i quali fai lo "scraping" (cu fu?) compensano un orario considerato GTM con le impostazioni del Tuo sistema?

P.S. - letto su wikipedia cosa si definisce scraping :)

[Edit] con quanto sopra, intendo si verifichi un caso del genere :
Codice: Seleziona tutto
>>> orario = datetime.datetime.now().time()
>>> orarioutc = datetime.datetime.utcnow().time()
>>> print(orario, orarioutc)
08:23:23.339861 07:24:03.112657
>>>

... ho dovuto rileggermi la docs prima di poterlo esemplificare :D
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1256
Iscrizione: ottobre 2006

Re: [Python] Stranezza nell'ora letta dal codice html

Messaggioda vaeVictis » martedì 8 gennaio 2019, 10:29

Appena ho un attimo scendo in cambusa e ti posto un esempio di codice.
(comunque ti avevo capito anche senza il p.s. :) )

edit: a pensarci meglio, non posso postare il codice perché dovreste installare BeautifulSoup per poterlo far girare :(
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: [Python] Stranezza nell'ora letta dal codice html

Messaggioda nuzzopippo » martedì 8 gennaio 2019, 13:14

vaeVictis Immagine ha scritto:...edit: a pensarci meglio, non posso postare il codice perché dovreste installare BeautifulSoup per poterlo far girare :(


beh ... anche se lanciare un test aiuta, la logica è logica e c'è speranza la docs possa dare indicazioni ... ammesso di riuscire ad individuare un probabile punto critico.
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1256
Iscrizione: ottobre 2006

Re: [Python] Stranezza nell'ora letta dal codice html

Messaggioda vaeVictis » mercoledì 9 gennaio 2019, 7:16

Allora, ho ridotto molto il codice al fine di stampare a schermo solo la data e il nome dell'evento (avviando il programma si capisce che intendo).
Per avviarlo serve installare due pacchetti:
Codice: Seleziona tutto
sudo apt-get  install python-bs4
sudo apt-get  install python-mechanize


Il codice è:
Codice: Seleziona tutto
from __future__ import print_function

from bs4 import BeautifulSoup

import regex as re
import mechanize
from datetime import datetime

URL_PAGE = 'https://www.myfxbook.com/forex-economic-calendar'

# recupero codice html      
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]       
html_content = br.open(URL_PAGE).read()

# preparazione della zuppa
soup = BeautifulSoup(html_content, "html.parser")

#regex compilate per l'estrazione dei dati di interesse
#dal singolo evento (estratto con la prima regex)
cal_row_re  = re.compile(r'^calRow.*')
date_re     = re.compile(r'\w+\s?\d+:\d+')         # <-- data

CalEvents = soup.find_all(id=cal_row_re)

for singleEvent in CalEvents:
    date = singleEvent.find(text=date_re).strip()
    eventName = singleEvent.find(class_='noUnderline').get_text().strip()
    print(date, eventName, sep = ';')


Confrontando quello che esce con le righe visualizzate sul browser aprendo il link di cui faccio lo scraping (che è nella variabile URL_PAGE).

Se hai voglia di lanciarlo e capire che succede... io ci sto diventando stupido.
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: [Python] Stranezza nell'ora letta dal codice html

Messaggioda nuzzopippo » mercoledì 9 gennaio 2019, 8:58

uhmm ... il "senso" del codice si capisce ma c'è di roba da "leggere" prima di potermi fare un'idea attendibile, mai fatto operazioni del genere in alcun linguaggio e mai utilizzato quelle librerie.
Spero nel fine settimana di riuscire a prepararmi un virtualenv e fare una prova, giusto per capire cosa esce.
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1256
Iscrizione: ottobre 2006

Re: [Python] Stranezza nell'ora letta dal codice html

Messaggioda vaeVictis » mercoledì 9 gennaio 2019, 9:15

Aspetta, che ti posto un esempio più semplice con lettura di un codice HTML ridotto e da file testuale

edit:
nel mentre io sto per impazzire appresso a questa stranezza.
È proprio strano. Nel codice html leggo una cosa e nel parsing un'altra :muro:
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: [Python] Stranezza nell'ora letta dal codice html

Messaggioda nuzzopippo » venerdì 11 gennaio 2019, 13:26

Ciao, ho guardato il codice della pagina da Te indicata, in particolare ho notato una notevole quantità di javascript.

In ricerche varie fatte per capire come indicare i dati della località di partenza di una richiesta url, mi sono imbattuto in questo post di stackowerflow, in particolare, vi ho letto :
The website is probably using JavaScript to render the page which BeautifulSoup doesn't know how to run , you'll need to use something like Selenium to load the page in an actual browser


ne sono tutt'altro che certo ma, se ho interpretato bene, potrebbe essere proprio la mancata interazione di BeautifulSoup con tali script la possibile fonte dei problemi che riscontri. Comunque ho ritenuto valesse la pena di segnalarti il trafiletto in citazione.
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1256
Iscrizione: ottobre 2006

Re: [Python] Stranezza nell'ora letta dal codice html

Messaggioda Sam9999 » venerdì 11 gennaio 2019, 13:36

Potrebbe essere collegato al problema di data che si evidenzia anche fra ubuntu e windows in dual boot?

Come risolvere la differenza di orario fra Ubuntu e Windows 10 in dual boot
-------------
S. @-M.
-------------
Avatar utente
Sam9999
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1584
Iscrizione: giugno 2014
Località: BO
Desktop: Studio Xfce
Distribuzione: Ubuntu 19.04 (Disco Dingo)

Re: [Python] Stranezza nell'ora letta dal codice html

Messaggioda nuzzopippo » venerdì 11 gennaio 2019, 16:25

Sam9999 Immagine ha scritto:Potrebbe essere collegato al problema di data che si evidenzia anche fra ubuntu e windows in dual boot?


beh ... python distingue l'ora locale di sistema da quella UTC (vedi la mia prima risposta in questo post) ma senza analizzarsi il sorgente delle librerie implicate non credo possa escludersi a priori.
In ogni caso credo sia improponibile, dal lato "utilizzatore", prevederela modifica delle impostazioni di sistema per una singola applicazione.
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1256
Iscrizione: ottobre 2006

Re: [Python] Stranezza nell'ora letta dal codice html

Messaggioda vaeVictis » sabato 12 gennaio 2019, 9:49

Sam9999 Immagine ha scritto:Potrebbe essere collegato al problema di data che si evidenzia anche fra ubuntu e windows in dual boot?

Come risolvere la differenza di orario fra Ubuntu e Windows 10 in dual boot


Ci avevo pensato ma non è cambiato nulla.
Ora riprovo a vedere se dipende da questo.
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: [Python] Stranezza nell'ora letta dal codice html

Messaggioda nuzzopippo » sabato 12 gennaio 2019, 17:05

vaeVictis Immagine ha scritto:Ora riprovo a vedere se dipende da questo.


Riferisci al javascript?

Oggi l'ho dedicato all'argomento, picchiandomi con venv ed, alla fine riuscendo a lanciare il tuo script, l'output è stato esattamente come lo hai segnalato, spostato di un'ora.

In particolare, la pagina di output era puntata al 14 p.v. ed il primo valore partiva dalle ore 1:00 ... i valori c'erano tutti, spostati di un'ora ed in più, c'era il primo valore del 15, che aveva ora 0:50.
Tale situazione mi ha pensare che la pagina rilevata sia completa ed elaborata per la data ricevuta ... che credo sia nessuna,

Ho concentrato i miei tentativi su mechanize ed è da stamattina che sto cercando di trovare il modo di inviare la data locale o l'ofset con UTC senza cavare un ragno dal buco, in particolare mi sono concentrato su cookies ed header, senza combinare nulla, non ho reperito documentazione in merito e da quella di mechanize non mi è riuscito di capire se e come si possa fare.

Nel caso riesca a combinare qualcosa, aggiornerò
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1256
Iscrizione: ottobre 2006

Re: [Python] Stranezza nell'ora letta dal codice html

Messaggioda vaeVictis » domenica 13 gennaio 2019, 10:58

Ho risolto lasciando perdere mechanize e usando selenium.
È un simulatore di browseer. Faccio il login così c'è la mia time zone e poi mi scarico il csv senza fare il parsing. Mi sa anche che ho cambiato pure il sito :)

Grazie del supporto. Metto risolto ma se vuoi postare quanto riesci a fare sei il benvenuto e leggo con piacere.
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 0 ospiti