Spaces:
Sleeping
Sleeping
| from bs4 import BeautifulSoup | |
| from urllib.parse import urljoin | |
| import collections | |
| import os | |
| import requests | |
| from multiprocessing import Pool | |
| # ----------- FETCH FUNCTION ----------- | |
| def fetch(url): | |
| try: | |
| response = requests.get(url) | |
| response.raise_for_status() # Raise an error if the request failed | |
| except requests.exceptions.RequestException as e: | |
| return f"Error fetching URL: {e}" | |
| return response.text | |
| # ----------- BFS CRAWLER FOR A SINGLE DOMAIN ----------- | |
| def crawl_bfs_single(start_url): | |
| if os.path.exists(os.path.join('./HospitalData' , start_url.replace("https://", "").replace("http://", "").replace("/", "_"))): | |
| print(f"โน๏ธ Skipping {start_url}, already crawled.") | |
| return # Stop processing if already crawled | |
| max_depth = 1 | |
| visited = set() | |
| queue = collections.deque() | |
| results = [] | |
| queue.append((start_url, 0)) | |
| while queue: | |
| url, depth = queue.popleft() | |
| if url in visited or depth > max_depth: | |
| continue | |
| visited.add(url) | |
| print(f"๐ Crawling: {url} (depth={depth})") | |
| html = fetch(url) | |
| if html is None: | |
| continue | |
| soup = BeautifulSoup(html, "html.parser") | |
| text = soup.get_text(separator="\n", strip=True) | |
| results.append({"url": url, "text": text}) | |
| if depth < max_depth: | |
| for a in soup.find_all("a", href=True): | |
| full_url = urljoin(url, a["href"]) | |
| if full_url.startswith("http") and full_url not in visited: | |
| queue.append((full_url, depth + 1)) | |
| # Save results to a timestamped file | |
| from datetime import datetime | |
| now_str = start_url | |
| print(f"W ./HospitalData/{ now_str.replace("https://", "").replace("http://", "").replace("/", "_")}") | |
| try: | |
| with open(os.path.join('./HospitalData' , now_str.replace("https://", "").replace("http://", "").replace("/", "_")), 'w') as f: | |
| f.write(str(results)) | |
| except Exception as e: | |
| print(f"โ Error saving results: {e}") | |
| return results | |
| # ----------- RUN SCRIPT ----------- | |
| urls = ['https://www.motion-lab.ch/' ,'https://www.adus-klinik.ch/' ,'https://www.medidranse.ch/' ,'https://www.cliniclesalpes.com/' ,'https://www.spitalmaennedorf.ch/notfall/' ,'https://www.polepositif.ch' ,'https://www.tellklinik.ch' ,'https://www.swissmedical.net/fr/swiss-visio/centres/swiss-visio-palezieux' ,'https://kinderklinik.insel.ch/de/' ,'https://www.cmsatigny.ch/' ,'https://www.spitalthun.ch/notfallzentrum' ,'https://www.magellan.ch/centre/centre-imagerie-servette/' ,'https://osteo7-7.ch' ,'https://osteo7-7.ch' ,'https://hochgebirgsklinik.ch/' ,'https://www.sro.ch/' ,'https://www.upk.ch/startseite.html' ,'https://www.eoc.ch/Ospedali-e-Istituti/Ospedale-Regionale-di-Lugano/Civico-e-Italiano/Presentazione.html' ,'https://www.gzo.ch/' ,'https://www.rhne.ch' ,'https://www.eoc.ch/Ospedali-e-Istituti/Ospedale-Regionale-di-Lugano/Civico-e-Italiano/Presentazione.html' ,'https://www.spital-emmental.ch' ,'https://www.genolier.net/' ,'https://www.pdgr.ch/standorte/klinik-waldhaus-chur/' ,'https://www.ilavigny.ch/' ,'https://www.luks.ch' ,'https://www.swsieber.ch/' ,'https://www.lindenhofgruppe.ch/de/standorte/sonnenhof/' ,'https://www.hirslanden.ch/de/klinik-beau-site/home.html' ,'https://www.lasource.ch/' ,'https://www.ksa.ch/' ,'https://www.hirslanden.ch/' ,'https://www.hug-ge.ch/' ,'https://www.obach.ch/' ,'https://www.lindenhofgruppe.ch/de/ueber-uns/standorte/' ,'https://www.ehnv.ch/etablissements/hopital-dyverdon-les-bains' ,'https://www.hug-ge.ch/hopital-loex' ,'https://www.lindenhofgruppe.ch/de/standorte/lindenhof/' ,'https://www.ehc-vd.ch/hopital-morges' ,'https://www.kssg.ch/' ,'https://www.herzzentrum.ch/' ,'https://www.h-fr.ch/hfr/fr/pub/index.htm' ,'https://www.hug.ch/lhopital-de-beau-sejour' ,'https://www.hug-ge.ch/hopital-bellerive/' ,'https://www.spital-oberengadin.ch/' ,'https://nant.ch/' ,'https://beritklinik.ch/berit-klinik-wattwil-landingpage/' ,'https://www.ksw.ch/' ,'https://www.lindberg.ch/' ,'https://www.barmelweid.ch/' ,'https://www.h-och.ch/ueber-uns/standorte/rorschach/' ,'https://www.stgag.ch/fachbereiche/psychiatrische-klinik/psychiatrische-klinik-muensterlingen/' ,'https://www.felixplatter.ch/' ,'https://www.hopitalrivierachablais.ch' ,'https://www.psychiatrie-sg.ch/' ,'https://www.hohenegg.ch/' ,'https://www.spitalmaennedorf.ch/' ,'https://irides.ch/' ,'https://www.hirslanden.ch/de/salem-spital/home.html' ,'https://www.hug-ge.ch/hopital-psychiatrie' ,'http://www.ksbl.ch/das-ksbl/standorte/der-standort-liestal' ,'https://www.spital-emmental.ch/' ,'https://www.unispital-basel.ch/ueber-uns/bereiche/medizinische-querschnittsfunktionen/kliniken-institute-abteilungen/institut-fuer-medizinische-genetik-und-pathologie/pathologie/' ,'https://www.hopitalvs.ch/de/spital-wallis/standorte/spitalzentrum-oberwallis.html' ,'https://www.pukzh.ch/standorte/?locationId=07956ecd-155d-0010-0152-012983939def' ,'https://www.ghol.ch' ,'https://www.eoc.ch/' ,'https://www.ehc-vd.ch/centremedical-aubonne' ,'https://www.csvp.ch' ,'https://oberwaid.ch/' ,'https://www.see-spital.ch/' ,'https://www.insel.ch/' ,'https://www.hopitalduvalais.ch/fr/lhopital-du-valais/sites/sion.html' ,'https://www.spital-lachen.ch/' ,'https://www.hug-ge.ch/crans-montana' ,'www.spital-muri.ch' ,'https://www.ehc-vd.ch/hopital-gilly/' ,'https://spitalthun.ch/' ,'https://www.hopital-broye.ch/' ,'https://www.la-tour.ch/' ,'https://www.spitaluster.ch' ,'http://www.triemli.ch/' ,'https://www.klinikbethanien.ch/' ,'http://www.waidspital.ch/' ,'https://www.spital-schwyz.ch/startseite.html' ,'https://www.spital-einsiedeln.ch' ,'https://www.usz.ch/' ,'https://spitalstsag.ch/' ,'https://www.ksgr.ch/frauenklinik' ,'https://www.ksgr.ch/' ,'https://www.lups.ch/standorte/' ,'https://www.kispi.uzh.ch/rza/de/Seiten/default.aspx' ,'https://www.ksgr.ch/' ,'https://www.spital-limmattal.ch/' ,'https://www.stgag.ch/' ,'https://www.kantonsspitalbaden.ch/' ,'https://adressverzeichnis.sozialearbeit.zhaw.ch/Detail/Index/Clienia_Schloessli_AG_-_Psychiatriezentrum_Uster-Alterstagesklinik-Uster-2ba9eb04-bc44-e311-8b4f-005056a606f6' ,'https://www.gzdielsdorf.ch/' ,'https://www.spital-linth.ch/' ,'https://www.stgag.ch/patienten-besucher/kantonsspital-muensterlingen/besuchszeiten/' ,'https://www.ghol.ch/jcms/ghol_5306/fr/votre-admission?portal=ghol_5842' ,'https://www.vidymed.ch/centre-medical-de-vidy.html' ,'https://www.hirslanden.ch/fr/clinique-bois-cerf/home.html' ,'https://www.hirslanden.ch/fr/clinique-cecil/home.html' ,'https://www.ehnv.ch/etablissements/hopital-de-la-vallee-de-joux' ,'https://gmo.ch/' ,'https://www.spitalzollikerberg.ch/' ,'https://www.hopitalduvalais.ch/fr/lhopital-du-valais/sites/martigny.html' ,'https://www.hopitalduvalais.ch/fr/lhopital-du-valais/sites/clinique-saint-ame.html?ct=0&cHash=58be177c5705953f44610229d3e65550' ,'https://www.hopitalrivierachablais.ch/jcms/c_5020/fr/monthey' ,'https://www.hopitalduvalais.ch/de/spital-wallis/standorte/visp.html' ,'https://www.hopitalduvalais.ch/fr/lhopital-du-valais/sites/sierre.html' ,'https://www.hopital-pae.ch/jcms/pae_10300/en/bienvenue' ,'https://www.hirslanden.ch/de/klinik-permanence/home.html' ,'https://www.unispital-basel.ch/' ,'https://www.rehab.ch/home.html' ,'https://www.kispisg.ch/de' ,'https://geriatrie-sg.ch/' ,'https://www.spitalbelp.ch/de/' ,'https://bethesda-spital.ch/' ,'https://www.hug-ge.ch/joli-mont' ,'https://www.h-fr.ch/' ,'https://www.daler.ch/' ,'https://www.ksbl.ch/das-ksbl/standorte/der-standort-bruderholz' ,'http://www.ksnw.ch' ,'https://www.srft.ch/' ,'https://www.reha-rheinfelden.ch/' ,'https://vertpre.com/fr/' ,'https://www.hug-ge.ch/psychiatrie-enfant-adolescent/unite-hospitalisation-jour' ,'https://www.claraspital.ch/' ,'https://merianiselin.ch/klinik/' ,'https://www.adullam.ch/' ,'https://srrws.ch/' ,'https://www.hirslanden.ch/global/de/startseite/kliniken_zentren/klinik_am_rosenberg.html' ,'https://www.luks.ch/' ,'https://www.luks.ch/standorte/standort-sursee' ,'https://www.klinik-adelheid.ch/' ,'https://www.klinik-arlesheim.ch/' ,'https://www.gzf.ch/startseite.html' ,'https://www.h-fr.ch/hfr/de/pub/patienten/standorte/meyriez.htm' ,'https://www.cliniquegenerale.ch/de/' ,'https://www.eoc.ch/Ospedali-e-Istituti/Ospedale-Regionale-di-Bellinzona-e-Valli/Bellinzona/Presentazione.html' ,'https://www.pdag.ch/' ,'https://www.ksgl.ch' ,'https://www.ksuri.ch/' ,'https://www.santacroce.ch/index.php?view=1000' ,'https://moncucco.ch/' ,'https://www.clinicasantanna.ch/it/' ,'https://www.csbregaglia.ch/' ,'https://www.spitalthusis.ch/' ,'https://www.csvm.ch/' ,'https://www.spitaeler-sh.ch/Patienten-Besucher/Psychiatriezentrum/index.php' ,'https://www.rehaclinic.ch' ,'http://www.spitalleuggern.ch/' ,'https://www.h-ju.ch/fr/L-Hopital-du-jura/Les-4-sites-de-l-hopital/Saignelegier/H-JU-site-de-Saignelegier.html' ,'https://www.h-ne.ch/contact/le-locle' ,'https://www.h-ne.ch/contact/val-de-ruz' ,'https://www.hopital-providence.ch/' ,'https://www.h-fr.ch/nos-sites-hospitaliers/hfr-tafers' ,'https://www.spitalriggisberg.ch/de/' ,'https://www.hirslanden.ch/de/klinik-linde/home.html' ,'https://www.klinikhohmad.ch' ,'https://www.rehaseewis.ch/home.html' ,'https://www.srrws.ch/ueber-uns/organisation/spitaeler/spital-altstaetten.html' ,'https://www.spitalverbund.ch/angebote-heiden-herisau/home-spital-heiden/' ,'https://www.ehnv.ch/jcms/obr_5017/orbe' ,'https://www.ehnv.ch/etablissements/hopital-de-chamblon' ,'https://www.hopitalduvalais.ch/de/spital-wallis/standorte/malevoz.html' ,'https://www.h-fr.ch/hfr/de/pub/dashfr/standorte/billens.htm' ,'http://www.clinique-le-noirmont.ch/' ,'https://www.h-ju.ch/' ,'https://www.h-ju.ch/' ,'https://www.rehabern.ch/' ,'https://www.eoc.ch/Ospedali-e-Istituti/Ospedale-Regionale-di-Locarno/Presentazione.html' ,'https://www.clinicasantachiara.ch/' ,'https://www.arsmedica.ch/it/' ,'https://www.spital-savognin.ch/' ,'https://cseb.ch/' ,'https://www.flurystiftung.ch/Startseite.20.0.html' ,'https://www.stephanshorn.ch/' ,'https://www.clienia.ch/de/standorte/standorte-stationaer/thurgau/littenheid' ,'https://seeklinik-brunnen.ch/' ,'https://www.paraplegie.ch/spz/de' ,'https://www.spitalmenziken.ch/' ,'https://www.gzf.ch/' ,'https://www.hirslanden.ch/de/klinik-belair/home.html' ,'https://klinik-schloss-mammern.ch/de/' ,'https://www.upd.ch/' ,'https://www.solothurnerspitaeler.ch/unsere-spitaeler/buergerspital-solothurn/' ,'https://www.klinik-gais.ch/home/' ,'https://www.usz.ch/standorte/usz-flughafen/' ,'https://www.herz-zentrum.com/muensterlingen/klinik/standorte' ,'https://www.ukbb.ch/' ,'https://www.hopital-broye.ch' ,'https://www.luks.ch/standorte/standort-luzern/kinderspital' ,'https://www.solothurnerspitaeler.ch/unsere-spitaeler/spital-dornach/' ,'https://www.zgks.ch/' ,'https://www.lups.ch/erwachsenen-psychiatrie/allgemeinpsychiatrie/kliniken/' ,'https://www.lups.ch' ,'https://www.spitalaffoltern.ch' ,'https://www.chuv.ch/' ,'https://www.spitalbuelach.ch/' ,'https://www.spitalfmi.ch/index.php?id=2217' ,'https://www.spitaeler-sh.ch/Patienten-Besucher/Kantonsspital-SH/index.php' ,'https://www.andreasklinik.ch/' ,'https://www.siloah.ch' ,'http://www.st-anna.ch' ,'https://www.spitalzentrum-biel.ch' ,'https://www.clienia.ch/' ,'https://www.kispi.uzh.ch/' ,'https://www.solothurnerspitaeler.ch/unsere-spitaeler/kantonsspital-olten/' ,'https://www.ksow.ch/'] | |
| if __name__ == "__main__": | |
| with Pool(processes=20) as pool: | |
| pool.map(crawl_bfs_single, urls) | |
| print("โ Crawled all the pages") | |