-
Notifications
You must be signed in to change notification settings - Fork 1
Scrap_tech
Lorsque l'on s'intéresse à la structure générale du site, on comprend comment l'on va s'attaquer à l'extraction des données : Le contenu est divisé en quatre ou cinq blocs, contenant chacun un graphique et une barre d'onglet permettant d'afficher les données du marché intéressant.
Cependant le principal problème est que les données ne sont pas stockées en propre dans le code du site, mais sont acquises par une requête d'un script JavaScript
à une base de donnée extérieure au site.Cela a plusieurs effets :
- Il est nécessaire de se rapprocher le plus possible du comportement utilisateur, car il faut pouvoir naviguer entre les onglets internes et faire bouger la souris pour charger les données intéressantes. On utilise ensuite un Parser pour extraire les données nous intéressant.
- Le chargement d'une page est unique (au début), une nouvelle requête n'entraine pas de changements dans la structure interne, il est donc impossible d'implémenter des EventListeners. Le processus a donc été délibérément ralenti pour pouvoir s'adapter à toutes les connexions internets pas trop lentes. On privilégiera aussi un système d'écriture non destructif.
Dans le cadre de la lecture d'un Graphe, il est nécessaire de pouvoir passer la souris au dessus de la courbe pour avoir accès aux valeurs de prix à cet instant. Cependant les positions des points d'intérêt est exprimé dans un repère dont on ne connait pas exactement l'origine. Un parcours des positions de ses points ne permettait pas d'accéder à toutes les données, vu que la précision trop peu importante faisait que souvent le curseur visait deux fois de suite un même point.
Pour pallier à ce problème nous avons accepté de sacrifier un peu de l'efficacité de l'algorithme en faisant se déplacer le curseur depuis la limite gauche du graphe, jusque la limite droite avec un pas inférieur à la distance entre deux points. Ainsi nous sommes certains d'accéder à tous les points.
Le Package en lui-même est composé de 3 sous-modules qui contiennent trois méthodes d’intérêt :
Ces deux modules ont donc une architecture assez similaire, et les méthodes de Scraping, que ce soit dans le cadre de graphe, ou bien dans le cadre de tableaux, sont intégrés dans une classe
Browser
qui possède des méthodes pour le lancement de chrome ainsi que l'extraction des différents marchés de GNL.
-
graph_scraper.scraper_iterator
: Cet itérateur est basé sur un algorithme de lecture des données de type graphes dans une page de Powernext, ce qui dans notre cas correspond à l'extraction de prix Spots. Il utilise le moduleSelenium
pour bouger la souris sur toute la largeur du graphique. Il itère sur toutes les marchés de GNL différend.-
Parameters
:- Il prend en argument
specific_type
, par défautFalse
, mais on peut ainsi accéder à un marché de GNL précis. - Il prend en argument
link
, le lien auquel chercher le lien le graphique. - Il prend en argument
bloc_number
, le numéro du bloc qui contient le graphe sur la page. Par défaut 0 dans le cadre de la page qui contient les prix spots.⚠️ Dépend entièrement de la version actuelle du site
- Il prend en argument
-
Return
:- Il retourne de façon itérative, l'ensemble des données de prix contenus sur la page, l'unité ainsi que le marché de GNL considéré.
- Dans l'ordre
unit, active, table
- La fonction lève diverses exceptions, essentiellement en vérifiant la forme des données.
-
-
table_scraper.scraper_iterator
: Cet itérateur est basé sur un algorithme de lecture des données de type tableau dans une page de Powernext, ce qui dans notre cas correspond à l'extraction de prix Forward. Il utilise le moduleSelenium
pour accéder au code contenu dans le codeHTML
. Il itère sur toutes les marchés de GNL différents.-
Parameters
:- Il prend en argument un string,
specific_type
, par défautFalse
, mais on peut ainsi accéder un type de GNL précis. - Il prend en argument un string,
link
, le lien auquel chercher le lien le graphique. - Il prend en argument un int,
bloc_number
, le numéro du bloc qui contient le graphe sur la page. Par défaut 3 dans le cadre de la page qui contient les prix forwards.
- Il prend en argument un string,
-
Return
:- Il retourne de façon itérative, l'ensemble des données de prix contenus sur la page, l'unité ainsi que le type de GNL considéré.
- Dans l'ordre
unit, active, table
-
La fonction lève diverses exceptions.
-
-
scrap_saver
: Fonction qui construit et update la base de données à partir des données fournies par lesBrowser
detable_scraper.py
etgraph_scraper.py
, en deux partie, il itère d'abord toutes les données du jour et pour chacune il les ajoute ou non à la base de donnée si son enregistrement n'a pas encore été enregistré.
On considère ici que il n'y a pas de consolidation à posteriori des données, ce qui fait que l'on ne vérifie pas la validité des données déjà enregistrée.
Dans notre mise en place, les données les plus récentes sont sockées par défaut dans le fichier
./Data
. Où certaines sauvegardes sont conservées
- Initialisation
- Problème et Analyse
- Module de WebScraping
- Module de Diffusion de Prix
- Module d'Optimisation du stockage
- Web App
- Jeux de Tests