diff --git a/cgi-bin/scraper.py b/cgi-bin/scraper.py index 9715a6e..03026be 100644 --- a/cgi-bin/scraper.py +++ b/cgi-bin/scraper.py @@ -23,6 +23,9 @@ def converteer(tekst, gebruiker=True): from urllib import parse + if tekst is None: + return None + if gebruiker: return parse.unquote(tekst).replace('_', ' ').split('#')[0] else: @@ -131,8 +134,6 @@ def run(taal, start, stop): Paden kunnen gecontroleerd worden met https://www.xefer.com/wikipedia, al doet dit niets met 'speciale' Wikipedia- links. - >>> run('fr', 'Langue', 'Philosophie') - Gewone controles >>> run('en', "Belgium", "Philosophy") {'pad': ['Belgium', 'Northwestern Europe', 'Subregion', 'Region', 'Geography', 'Science', 'Scientific method', 'Empirical evidence', 'Proposition', 'Logic', 'Reason', 'Consciousness', 'Sentience', 'Emotion', 'Mental state', 'Mind', 'Phenomenon', 'Immanuel Kant', 'Philosophy']} @@ -140,6 +141,8 @@ def run(taal, start, stop): {'pad': ['Department of Standards Malaysia', 'Ministry of International Trade and Industry (Malaysia)', 'Ministry (government department)', 'Executive (government)', 'Government', 'State (polity)', 'Germans', 'Germany', 'Central Europe', 'Europe', 'Continent', 'Landmass', 'Region', 'Geography', 'Science', 'Scientific method', 'Empirical evidence', 'Proposition', 'Logic', 'Reason', 'Consciousness', 'Sentience', 'Emotion', 'Mental state', 'Mind', 'Phenomenon', 'Immanuel Kant', 'Philosophy']} >>> run('en', 'Malkajgiri mandal', 'Philosophy') {'pad': ['Malkajgiri mandal', 'Medchal–Malkajgiri district', 'District', 'Administrative division', 'Sovereign state', 'Polity', 'Politics', 'Decision-making', 'Psychology', 'Science', 'Scientific method', 'Empirical evidence', 'Proposition', 'Logic', 'Reason', 'Consciousness', 'Sentience', 'Emotion', 'Mental state', 'Mind', 'Phenomenon', 'Immanuel Kant', 'Philosophy']} + >>> run('fr', 'Langue', 'Philosophie') + {'pad': ['Langue', 'Système', 'Ensemble', 'Mathématiques', 'Connaissance', 'Notion', 'Connaissance (philosophie)', 'Philosophie']} Loops >>> run('nl', 'België', 'Philosophy') @@ -148,7 +151,8 @@ def run(taal, start, stop): {'pad': ['Tom Inglesby', 'Johns Hopkins Center for Health Security', 'Nonprofit organization', 'Contract failure']} Doodlopende eindes - TODO Voorbeelden zoeken + >>> run('en', 'Gaumee Film Awards', 'Philosophy') + {'error': "Er konden geen nieuwe links meer gevonden worden op 'Gaumee Film Awards'"} Foute linkjes >>> run('en', 'Deze pagina bestaat niet', 'Philosophy') @@ -166,7 +170,7 @@ def run(taal, start, stop): # Stoppen indien het inladen van de pagina niet lukte. if pagina.status_code != 200: - return {'error': f"Er ging iets fout bij het inladen van '{lijst[-1]}'. Bestaat de website?"} + return {'error': f"Er ging iets fout bij het inladen van '{lijst[-1]}', vertrekkende vanaf '{lijst[0]}'. Bestaat de website?"} # Verwerken. soep = BeautifulSoup(pagina.content, 'html.parser') diff --git a/cgi-bin/stresstest.py b/cgi-bin/stresstest.py index 5449bf8..4ae136e 100644 --- a/cgi-bin/stresstest.py +++ b/cgi-bin/stresstest.py @@ -5,37 +5,15 @@ Dit script is enkel en alleen bedoeld om heel veel willekeurige pagina's te kunn enkel degene eruit te halen die falen (en dus niet correct afgehandeld worden). """ -from bs4 import BeautifulSoup -import requests - -from scraper import converteer, zoek_link - - -def run(taal, start, stop): - lijst = [converteer(start, True)] if start != 'Special:Random' else [] - base = f"https://{taal}.wikipedia.org/wiki/" - - while start != stop: - - # Dit is het enigste dat we aanpassen. - print(lijst[-1] if len(lijst) != 0 else []) - - pagina = requests.get(base + converteer(start, False)) - if pagina.status_code != 200: - return {'error': f"Er ging iets fout bij het inladen van '{lijst[-1]}'. Bestaat de website?"} - soep = BeautifulSoup(pagina.content, 'html.parser') - start = converteer(zoek_link(soep)) - if start is None: - return {'error': f"Er konden geen nieuwe links meer gevonden worden op '{lijst[-1]}'"} - if start in lijst: - return {'error': - f"Cyclus gedetecteerd op '{start}', startende vanaf '{lijst[0]}'. Het onafgewerkte pad zal niet worden toegevoegd aan het overzicht. " - } - lijst.append(start) - return {'pad': lijst} - +from scraper import run antwoord = run('en', 'Special:Random', 'Philosophy') +langste = antwoord + while 'pad' in antwoord or antwoord['error'].startswith('Cyclus'): + if 'error' not in antwoord and len(langste['pad']) < len(antwoord['pad']): + langste = antwoord + print(f"Langste pad (lengte {len(langste['pad'])}), van {langste['pad'][0]} naar {langste['pad'][-1]}") antwoord = run('en', 'Special:Random', 'Philosophy') -print(antwoord['error']) + +print('Er ging iets mis:', antwoord['error']) diff --git a/images/wikipedia_edit.png b/images/wikipedia_edit.png index fbe80ed..65bdce6 100644 Binary files a/images/wikipedia_edit.png and b/images/wikipedia_edit.png differ diff --git a/index.html b/index.html index cc143cf..c72e9c5 100644 --- a/index.html +++ b/index.html @@ -7,21 +7,19 @@
-- De huidige boom zal overschreven worden bij een nieuwe toevoeging. -
- -Philosophy Wikipedia Path visualiser
+From Philosophy Wikipedia Path visualiser
+