From 76475d4a2a2a0f8259a937eaed9eaca965fdafe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20GUEZO?= Date: Thu, 5 Feb 2026 18:21:50 +0100 Subject: [PATCH] correction: certains bugs sur get_json_data --- main.py | 16 +++++++++------- test_main.py | 11 ++++++++--- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/main.py b/main.py index 5a4f87d..acc276a 100644 --- a/main.py +++ b/main.py @@ -11,7 +11,7 @@ class Scraper: sur le serveur https de Millesina """ - def __init__(self): + def __init__(self, subdir: str = None): """ Initialise la session de scraping et récupère la page d'accueil. """ @@ -19,11 +19,11 @@ class Scraper: # TCP et d'avoir toujours une connexion constante avec le server self._session: requests.Session = requests.Session() self._url: str = "https://www.millesima.fr/" - self._soup = self.getsoup() + self._soup = self.getsoup(subdir) def _request( self, subdir: str, use_cache: bool = True - ) -> requests.Response | requests.HTTPError: + ) -> requests.Response | requests.HTTPError: """ Effectue une requête GET sur le serveur Millesima. :param subdir: Le sous-répertoire ou chemin de l'URL (ex: "/vins"). @@ -34,7 +34,8 @@ class Scraper: (4xx, 5xx). """ - target_url: str = f"{self._url}{subdir.lstrip('/')}" + target_url: str = f"{self._url}{subdir.lstrip('/')}" if subdir is \ + not None else self._url # Éviter un max possible de faire des requetes au servers même # en ayant un tunnel tcp avec le paramètre `use_cache` que si # activer, va comparer l'url avec l'url précédant @@ -49,7 +50,8 @@ class Scraper: return self._response - def getsoup(self, subdir: str = "/") -> BeautifulSoup: + def getsoup(self, subdir: str = None + ) -> BeautifulSoup | requests.HTTPError: """ Récupère le contenu HTML d'une page et le transforme en objet BeautifulSoup. @@ -59,7 +61,7 @@ class Scraper: :return: BeautifulSoup: L'objet parsé pour extraction de données. :rtype: BeautifulSoup """ - if subdir is not None: + if not hasattr(self, "_soup") or subdir is not None: self._request(subdir) self._soup = BeautifulSoup(self._response.text, "html.parser") return self._soup @@ -81,7 +83,7 @@ class Scraper: data: dict[str, Any] = json.loads(script.string) for element in ['props', 'pageProps', 'initialReduxState', 'product', 'content']: - data.get(element) + data = data[element] return data except json.decoder.JSONDecodeError: pass diff --git a/test_main.py b/test_main.py index 645bf07..6b4a7ce 100644 --- a/test_main.py +++ b/test_main.py @@ -1,6 +1,11 @@ -from main import * +from main import Scraper -scraper = Scraper() def test_soup(): - assert scraper.getsoup().find('h1').text[3:12] == "MILLESIMA" + assert Scraper().getsoup().find('h1')\ + .text[3:12] == "MILLESIMA" + + +def test_getProductName(): + assert Scraper("chateau-gloria-2016.html").get_json_data()['productName']\ + == "Château Gloria 2016"