dealfront_enrichment.py aktualisiert

This commit is contained in:
2025-07-11 09:15:50 +00:00
parent c4237a6fba
commit 340fcb5c60

View File

@@ -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: