die letzte Versoin iteriert erstmals über alle Seiten, liefert aber noch nicht alle Firmen.
This commit is contained in:
@@ -133,10 +133,9 @@ class DealfrontScraper:
|
|||||||
|
|
||||||
def scrape_all_pages(self, max_pages=10):
|
def scrape_all_pages(self, max_pages=10):
|
||||||
"""
|
"""
|
||||||
Iteriert durch alle Ergebnisseiten, klickt auf den echten Weiter-Button,
|
Iteriert durch alle Ergebnisseiten und sammelt ALLE Firmenzeilen (auch Duplikate).
|
||||||
und loggt alle Pagination-Buttons ausführlich für Debugging-Zwecke.
|
|
||||||
"""
|
"""
|
||||||
all_companies = {}
|
all_companies = []
|
||||||
for page_number in range(1, max_pages + 1):
|
for page_number in range(1, max_pages + 1):
|
||||||
logger.info(f"--- Verarbeite Seite {page_number} ---")
|
logger.info(f"--- Verarbeite Seite {page_number} ---")
|
||||||
self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table#t-result-table")))
|
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.")
|
logger.warning("Keine Ergebnisse auf dieser Seite gefunden, breche ab.")
|
||||||
break
|
break
|
||||||
|
|
||||||
for company in page_results:
|
logger.info(f"Seite {page_number}: {len(page_results)} Firmen gefunden. Gesamt bisher: {len(all_companies) + len(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 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:
|
try:
|
||||||
pagination_nav = self.driver.find_element(By.CSS_SELECTOR, "nav.eb-pagination")
|
pagination_nav = self.driver.find_element(By.CSS_SELECTOR, "nav.eb-pagination")
|
||||||
buttons = pagination_nav.find_elements(By.CSS_SELECTOR, "a.eb-pagination-button")
|
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}")
|
logger.warning(f"Konnte Pagination-Buttons nicht vollständig loggen: {e}")
|
||||||
buttons = []
|
buttons = []
|
||||||
|
|
||||||
# --- Suche nach dem Weiter-Button ---
|
# Suche nach dem Weiter-Button
|
||||||
next_button = None
|
next_button = None
|
||||||
for btn in buttons:
|
for btn in buttons:
|
||||||
btn_html = btn.get_attribute('outerHTML')
|
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() == ""):
|
if ("svg" in btn_html) and ("disabled" not in btn.get_attribute('class')) and (btn.text.strip() == ""):
|
||||||
next_button = btn
|
next_button = btn
|
||||||
break
|
break
|
||||||
@@ -184,16 +180,15 @@ class DealfrontScraper:
|
|||||||
|
|
||||||
logger.info("Klicke auf 'Weiter'-Button...")
|
logger.info("Klicke auf 'Weiter'-Button...")
|
||||||
try:
|
try:
|
||||||
# Speichere vor dem Klick das erste Zeilen-Element, um später auf Aktualisierung zu warten
|
# Vor dem Klick: erste Zeile merken
|
||||||
try:
|
try:
|
||||||
first_row_element = self.driver.find_element(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]")
|
first_row_element = self.driver.find_element(By.CSS_SELECTOR, "table#t-result-table tbody tr[id]")
|
||||||
except Exception:
|
except Exception:
|
||||||
first_row_element = None
|
first_row_element = None
|
||||||
|
|
||||||
self.driver.execute_script("arguments[0].click();", next_button)
|
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:
|
if first_row_element:
|
||||||
try:
|
try:
|
||||||
self.wait.until(EC.staleness_of(first_row_element))
|
self.wait.until(EC.staleness_of(first_row_element))
|
||||||
@@ -201,13 +196,12 @@ class DealfrontScraper:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"Timeout beim Warten auf das Nachladen der Tabelle: {e}")
|
logger.warning(f"Timeout beim Warten auf das Nachladen der Tabelle: {e}")
|
||||||
else:
|
else:
|
||||||
time.sleep(2) # Notfall: Warte einfach etwas länger
|
time.sleep(2)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Fehler beim Klicken auf den Weiter-Button: {e}")
|
logger.error(f"Fehler beim Klicken auf den Weiter-Button: {e}")
|
||||||
break
|
break
|
||||||
|
|
||||||
return list(all_companies.values())
|
return all_companies
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
if self.driver:
|
if self.driver:
|
||||||
|
|||||||
Reference in New Issue
Block a user