From b4a199bbe3f185f3ee3d7e93c97215654af83ef4 Mon Sep 17 00:00:00 2001 From: Floke Date: Fri, 11 Jul 2025 09:15:50 +0000 Subject: [PATCH] dealfront_enrichment.py aktualisiert --- dealfront_enrichment.py | 106 ++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/dealfront_enrichment.py b/dealfront_enrichment.py index bc674945..d6d4d0ea 100644 --- a/dealfront_enrichment.py +++ b/dealfront_enrichment.py @@ -126,61 +126,61 @@ class DealfrontScraper: continue return results - def scrape_all_pages(self, max_pages=10): # Sicherheitslimit für Seiten - """ - Iteriert durch alle Ergebnisseiten, indem auf den 'Weiter'-Button geklickt wird. - Scrollt vor jeder Extraktion, um alle Elemente zu laden. - """ - all_companies = {} + def scrape_all_pages(self, max_pages=10): # Sicherheitslimit für Seiten + """ + Iteriert durch alle Ergebnisseiten, indem auf den 'Weiter'-Button geklickt wird. + Scrollt vor jeder Extraktion, um alle Elemente zu laden. + """ + all_companies = {} + + for page_number in range(1, max_pages + 1): + logger.info(f"--- Verarbeite Seite {page_number} ---") - for page_number in range(1, max_pages + 1): - logger.info(f"--- Verarbeite Seite {page_number} ---") - - # 1. Warten, bis die Tabelle grundsätzlich geladen ist - table_selector = (By.CSS_SELECTOR, "table#t-result-table tbody") - self.wait.until(EC.visibility_of_element_located(table_selector)) - - # 2. SCROLLEN: Scrolle die Seite nach unten, um alle Zeilen zu laden - logger.info("Scrolle nach unten, um alle Zeilen der Seite zu laden...") - self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") - time.sleep(2) # Kurze Pause, damit die neuen Zeilen rendern können - self.driver.execute_script("window.scrollTo(0, 0);") # Optional: wieder nach oben scrollen - time.sleep(1) - - # 3. DATEN EXTRAHIEREN - page_results = self.extract_current_page_results() - if not page_results: - logger.info("Keine Ergebnisse auf dieser Seite extrahiert. Breche ab.") - break - - for company in page_results: - # Verwende eine Kombination aus Name und Webseite als eindeutigen Schlüssel - 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 einzigartig: {len(all_companies)}") - - # 4. PAGINIERUNG - try: - # Robusterer Selektor für den "Weiter"-Button - next_button_selector = (By.XPATH, "//a[contains(@class, 'eb-pagination-button') and not(contains(@class, 'disabled'))][last()]") - next_button = self.driver.find_element(*next_button_selector) - - # Prüfen, ob der gefundene Button der "Weiter"-Button ist (enthält Pfeil nach rechts) - if "fa-angle-right" not in next_button.get_attribute('innerHTML'): - logger.info("Letzte Seite erreicht (kein 'Weiter'-Pfeil im letzten Button).") - break - - logger.info("Klicke auf 'Weiter'...") - self.driver.execute_script("arguments[0].click();", next_button) - time.sleep(4) # Feste Wartezeit für den Seitenwechsel - - except NoSuchElementException: - logger.info("Kein klickbarer 'Weiter'-Button mehr gefunden. Paginierung abgeschlossen.") - break + # 1. Warten, bis die Tabelle grundsätzlich geladen ist + table_selector = (By.CSS_SELECTOR, "table#t-result-table tbody") + self.wait.until(EC.visibility_of_element_located(table_selector)) - return list(all_companies.values()) + # 2. SCROLLEN: Scrolle die Seite nach unten, um alle Zeilen zu laden + logger.info("Scrolle nach unten, um alle Zeilen der Seite zu laden...") + self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") + time.sleep(2) # Kurze Pause, damit die neuen Zeilen rendern können + self.driver.execute_script("window.scrollTo(0, 0);") # Optional: wieder nach oben scrollen + time.sleep(1) + + # 3. DATEN EXTRAHIEREN + page_results = self.extract_current_page_results() + if not page_results: + logger.info("Keine Ergebnisse auf dieser Seite extrahiert. Breche ab.") + break + + for company in page_results: + # Verwende eine Kombination aus Name und Webseite als eindeutigen Schlüssel + 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 einzigartig: {len(all_companies)}") + + # 4. PAGINIERUNG + try: + # Robusterer Selektor für den "Weiter"-Button + next_button_selector = (By.XPATH, "//a[contains(@class, 'eb-pagination-button') and not(contains(@class, 'disabled'))][last()]") + next_button = self.driver.find_element(*next_button_selector) + + # Prüfen, ob der gefundene Button der "Weiter"-Button ist (enthält Pfeil nach rechts) + if "fa-angle-right" not in next_button.get_attribute('innerHTML'): + logger.info("Letzte Seite erreicht (kein 'Weiter'-Pfeil im letzten Button).") + break + + logger.info("Klicke auf 'Weiter'...") + self.driver.execute_script("arguments[0].click();", next_button) + time.sleep(4) # Feste Wartezeit für den Seitenwechsel + + except NoSuchElementException: + logger.info("Kein klickbarer 'Weiter'-Button mehr gefunden. Paginierung abgeschlossen.") + break + + return list(all_companies.values()) def close(self): if self.driver: