De openbare doctoraatsverdediging is het sluitstuk van een doctoraatstraject en vindt plaats na een voorverdediging mits goedkeuring van de jury. Als een doctoraatsstudent een openbare verdediging mag afleggen, betekent dit vrijwel altijd dat hij zal slagen.

Meestal nodigt de promovendus op de openbare verdediging niet alleen collega's en professoren uit, maar ook vrienden en familie. Voor vrienden en familie die niet thuis zijn in het domein van het doctoraat, is die verdediging soms moeilijk te volgen, maar na afloop van de verdediging wordt aan de genodigden meestal een drankje en een hapje aangeboden.

Een aantal studenten hebben ontdekt dat die feestjes na de verdedigingen altijd goed verzorgd zijn en dat er vrijwel geen toegangscontrole is. Ze hebben besloten om te gaan party-crashen.

comic
A typical conversation at a PhD party
A typical conversation at a PhD party

Om een en ander te vergemakkelijken willen ze een webscraper programmeren, die automatisch het tijdstip van de doctoraatsverdedigingen aan verschillende faculteiten afhaalt van de website van UGent en importeert in hun kalenderapplicatie. De import in de kalenderapp moeten jullie niet programmeren, maar wel de webscraper.

Webpagina met doctoraatsverdedigingen per faculteit

Elke faculteit heeft een pagina waarop de geplande doctoraatsverdedigingen aangekondigd staan. De url van deze webpagina's kan je samenstellen op basis van de afkorting van de faculteit.

Voorbeelden:

Opgelet

De pagina's hierboven worden dagelijks aangepast. Op sommige momenten kan voor een bepaalde faculteit de lijst leeg zijn.

Daarom hebben we voor deze oefening een aantal pagina's nagebootst op een eigen webserver. De data zijn fictief, en de lay-out is niet 100%, maar de html-code voor de tabel met doctoraatsverdedigingen is identiek aan de oorspronkelijk webpagina's van de UGent website. Gebruik in je oefening deze url (let op de positie van de faculteitscode):

Faculteit Economie en Bedrijfskunde (code = "eb"): https://ebapps.ugent.be/maninf/phd-crashing/eb.html4
Faculteit Wetenschappen (code = "we"): https://ebapps.ugent.be/maninf/phd-crashing/we.html5

Opgave

Schrijf een functie get_defence_dates met één argument: de code van de faculteit (een string).

De functie leest een webpagina in van de url zoals hierboven beschreven en retourneert een lijst met strings. Elke string in de lijst komt overeen met een doctoraatsverdediging en is opgebouwd zoals in het volgende voorbeeld (let op, voornaam komt voor familienaam).

Voorbeeld: '26-05-2018 17:30 Foster Provost'

Je mag uitgaan van volgende veronderstellingen:

  1. De opgegeven faculteitscode correspondeert altijd met een bestaande pagina in de map https://ebapps.ugent.be/maninf/phd-crashing. Je hoeft dus niet na te gaan of de pagina effectief gevonden wordt.
  2. De datums en namen van de geplande doctoraatsverdedigingen staan steeds in een cel (tag <td >) binnenin een html-tabel.
  3. De <td>-elementen met de datum en die met de naam van de promovendus, staan altijd op een afzonderlijke lijn en heben altijd een welbepaalde klasse (code voorbeeld: <td class ="xxx">. Het is aan jou om de naam van de juiste klasse te gaan opzoeken in de broncode van de pagina.
  4. De naam van de promovendus staat op de webpagina in de vorm familienaam, voornaam.

Voorbeeld

Schermafdruk van de pagina https://ebapps.ugent.be/maninf/phd-crashing/eb.html

comic

Schermafdruk

>>> get_defence_dates('eb')
['26-05-2018 17:30 Foster Provost', 
'05-10-2018 17:00 Tom Fawcett', 
'23-10-2018 17:00 Ian Witten', 
'02-11-2018 18:00 Eibe Frank']