Finding pupils to tutor
Move your code into functions
Functions are easier to test, and make it easier to modify your code over time.
For example, I think the first block requests information from a server and creates a list of links. I think the second block processes that list of links and generates some other sort of list. I think the third block iterates over the list from the second block and generates yet another list.
If these blocks were in functions, then the main logic would be self explanatory. For example, your code could look like:
...
ilmot = get_students(link)
parsittu = some_other_function(ilmot)
parsilmot = another_function(parsittu)
quote = create_quote(parsilmot)
...

If those functions all had reasonable names, the code would be very easy to understand, and it would be easy to test each function in isolation.
Not only that, but you can more easily move all of that code into a function so that you can implement a &quot;refresh&quot; feature into the UI so that you don't have to restart the script every time you want to update the data.