Я представляю себе парсер, который работает, например, с BeautifulSoup. - и, возможно, Панды. Я предпочитаю работать в Google Colab.
Для меня здесь важно следующее:
а. название объекта
б. адрес
c. сайт
d. адрес электронной почты, если он доступен
e. краткое описание — если его еще можно найти на странице.
Моя попытка — сделать это с помощью Pandas и сохранить во фрейме данных, чтобы данные записывались в файл. .
здесь ДАННЫЕ - или веб-сайт:
страница обзора: https://www.kliniken.de/suche/altenheim ... DEСтраница 2.: https://www.kliniken.de/suche/altenheim?seite=2
это продолжается и продолжается - до страницы 40
вот страница с подробностями - то есть страница результатов:
https://www.kliniken.de/altenheim/evang ... 5986P.html
см. мой подход:
Код: Выделить всё
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
# Basis-URL für die Übersichtseiten
base_url = "https://www.kliniken.de/suche/altenheim?seite={page}&country=DE"
# Liste zur Speicherung der gesammelten Daten
data = []
# Funktion, um die Details einer Einrichtung zu scrapen
def scrape_detail_page(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# Datenfelder initialisieren
name = address = website = email = description = None
# Beispiel: Name der Einrichtung (Header-Bereich der Seite)
name_tag = soup.find('h1', class_='page-title')
if name_tag:
name = name_tag.get_text(strip=True)
# Beispiel: Adresse (entweder spezifische Class suchen oder anhand von Strukturen)
address_tag = soup.find('div', class_='contact-address')
if address_tag:
address = address_tag.get_text(separator=', ', strip=True)
# Website und E-Mail (oft im Kontaktbereich)
contact_links = soup.find_all('a', href=True)
for link in contact_links:
href = link['href']
if 'mailto:' in href:
email = href.replace('mailto:', '').strip()
elif 'http' in href and not 'kliniken.de' in href:
website = href.strip()
# Kurzbeschreibung, falls vorhanden
description_tag = soup.find('div', class_='description')
if description_tag:
description = description_tag.get_text(strip=True)
return {
'Name': name,
'Adresse': address,
'Website': website,
'E-Mail': email,
'Kurzbeschreibung': description
}
# Scraper für die Überblicksseiten
for page in range(1, 41): # Geht durch alle 40 Seiten
print(f"Scraping Übersichtseite {page}...")
response = requests.get(base_url.format(page=page))
soup = BeautifulSoup(response.text, 'html.parser')
# Finde alle Links zu den Detailseiten
detail_links = soup.find_all('a', class_='result-item-title', href=True)
for link in detail_links:
detail_url = "https://www.kliniken.de" + link['href']
print(f" - Scraping Detailseite: {detail_url}")
# Detailseite scrapen und Daten speichern
detail_data = scrape_detail_page(detail_url)
data.append(detail_data)
# Optional: Kurze Pause, um die Serverlast zu reduzieren
time.sleep(1)
# Daten in ein DataFrame speichern und als CSV exportieren
df = pd.DataFrame(data)
csv_file = 'altenheime_deutschland.csv'
df.to_csv(csv_file, index=False)
print(f"Daten wurden in {csv_file} gespeichert.")
Код: Выделить всё
Scraping Übersichtseite 1...
Scraping Übersichtseite 2...
Scraping Übersichtseite 3...
Scraping Übersichtseite 4...
Scraping Übersichtseite 5...
Scraping Übersichtseite 6...
Scraping Übersichtseite 7...
Scraping Übersichtseite 8...
Scraping Übersichtseite 9...
Scraping Übersichtseite 10...
Scraping Übersichtseite 11...
Scraping Übersichtseite 12...
Scraping Übersichtseite 13..
Подробнее здесь: https://stackoverflow.com/questions/791 ... y-the-page