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

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

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

Messaggio da vaeVictis »

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
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1624
Iscrizione: giovedì 12 ottobre 2006, 11:34

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

Messaggio da nuzzopippo »

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
Fatti non foste a viver come bruti ...
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

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

Messaggio da vaeVictis »

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
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1624
Iscrizione: giovedì 12 ottobre 2006, 11:34

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

Messaggio da nuzzopippo »

vaeVictis [url=https://forum.ubuntu-it.org/viewtopic.php?p=5106567#p5106567][img]https://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] 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.
Fatti non foste a viver come bruti ...
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

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

Messaggio da vaeVictis »

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
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1624
Iscrizione: giovedì 12 ottobre 2006, 11:34

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

Messaggio da nuzzopippo »

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.
Fatti non foste a viver come bruti ...
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

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

Messaggio da vaeVictis »

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
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1624
Iscrizione: giovedì 12 ottobre 2006, 11:34

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

Messaggio da nuzzopippo »

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.
Fatti non foste a viver come bruti ...
Avatar utente
Sam9999
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1983
Iscrizione: lunedì 9 giugno 2014, 8:59
Desktop: Studio Xfce
Distribuzione: Ubuntu 20.04 LTS (Focal)
Località: BO
Contatti:

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

Messaggio da Sam9999 »

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
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1624
Iscrizione: giovedì 12 ottobre 2006, 11:34

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

Messaggio da nuzzopippo »

Sam9999 [url=https://forum.ubuntu-it.org/viewtopic.php?p=5107322#p5107322][img]https://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] 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.
Fatti non foste a viver come bruti ...
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

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

Messaggio da vaeVictis »

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
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1624
Iscrizione: giovedì 12 ottobre 2006, 11:34

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

Messaggio da nuzzopippo »

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ò
Fatti non foste a viver come bruti ...
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

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

Messaggio da vaeVictis »

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.»
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti