From d01f64b2d2798ff8d37c0cbbe321e91b4eb50d4e Mon Sep 17 00:00:00 2001 From: Floke Date: Sun, 13 Jul 2025 10:18:18 +0000 Subject: [PATCH] =?UTF-8?q?die=20letzte=20Versoin=20iteriert=20erstmals=20?= =?UTF-8?q?=C3=BCber=20alle=20Seiten,=20liefert=20aber=20noch=20nicht=20al?= =?UTF-8?q?le=20Firmen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dealfront_enrichment.py | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/dealfront_enrichment.py b/dealfront_enrichment.py index fb507ff5..1376a061 100644 --- a/dealfront_enrichment.py +++ b/dealfront_enrichment.py @@ -133,10 +133,9 @@ class DealfrontScraper: def scrape_all_pages(self, max_pages=10): """ - Iteriert durch alle Ergebnisseiten, klickt auf den echten Weiter-Button, - und loggt alle Pagination-Buttons ausführlich für Debugging-Zwecke. + Iteriert durch alle Ergebnisseiten und sammelt ALLE Firmenzeilen (auch Duplikate). """ - all_companies = {} + all_companies = [] for page_number in range(1, max_pages + 1): logger.info(f"--- Verarbeite Seite {page_number} ---") self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table#t-result-table"))) @@ -147,14 +146,12 @@ class DealfrontScraper: logger.warning("Keine Ergebnisse auf dieser Seite gefunden, breche ab.") break - for company in page_results: - unique_key = (company.get('name'), company.get('website')) - if unique_key not in all_companies: - all_companies[unique_key] = company + logger.info(f"Seite {page_number}: {len(page_results)} Firmen gefunden. Gesamt bisher: {len(all_companies) + len(page_results)}") - logger.info(f"Seite {page_number}: {len(page_results)} Firmen gefunden. Gesamt einzigartig: {len(all_companies)}") + # ALLE Ergebnisse einfach anhängen (keine Deduplizierung!) + all_companies.extend(page_results) - # --- DEBUG: Alle Pagination-Buttons loggen --- + # --- Pagination-Button-Logik bleibt wie gehabt --- try: pagination_nav = self.driver.find_element(By.CSS_SELECTOR, "nav.eb-pagination") buttons = pagination_nav.find_elements(By.CSS_SELECTOR, "a.eb-pagination-button") @@ -169,11 +166,10 @@ class DealfrontScraper: logger.warning(f"Konnte Pagination-Buttons nicht vollständig loggen: {e}") buttons = [] - # --- Suche nach dem Weiter-Button --- + # Suche nach dem Weiter-Button next_button = None for btn in buttons: btn_html = btn.get_attribute('outerHTML') - # Heuristik: Button enthält ein SVG, ist nicht disabled und hat keinen Zahlentext if ("svg" in btn_html) and ("disabled" not in btn.get_attribute('class')) and (btn.text.strip() == ""): next_button = btn break @@ -184,16 +180,15 @@ class DealfrontScraper: logger.info("Klicke auf 'Weiter'-Button...") try: - # Speichere vor dem Klick das erste Zeilen-Element, um später auf Aktualisierung zu warten + # Vor dem Klick: erste Zeile merken try: first_row_element = self.driver.find_element(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]") except Exception: first_row_element = None self.driver.execute_script("arguments[0].click();", next_button) - time.sleep(2) # Warte kurz auf das Nachladen + time.sleep(2) - # Warte auf das Nachladen der Tabelle if first_row_element: try: self.wait.until(EC.staleness_of(first_row_element)) @@ -201,13 +196,12 @@ class DealfrontScraper: except Exception as e: logger.warning(f"Timeout beim Warten auf das Nachladen der Tabelle: {e}") else: - time.sleep(2) # Notfall: Warte einfach etwas länger - + time.sleep(2) except Exception as e: logger.error(f"Fehler beim Klicken auf den Weiter-Button: {e}") break - return list(all_companies.values()) + return all_companies def close(self): if self.driver: