def retrieve(cat_name, mw_instance='https://en.wikipedia.org', types=['page', 'subcat', 'file'], clean_subcat_names=False):
    """Retrieve pages that belong to a given category.
        Args:
            cat_name: Category name e.g. 'Category:Presidents_of_the_United_States'.
            mw_instance: Which MediaWiki instance to use (the URL 'origin'). Defaults to 'https://en.wikipedia.org'.
            types: Which types of pages to retrieve. Defaults to `['page', 'subcat', 'file']`.
            clean_subcat_names: If `True`, removes the e.g. 'Category:' prefix of the titles. Defaults to `False`.
        Returns:
            Array of pages where a page is a dictionary of `{'name': 'some name', 'link': 'some absolute link'}`.
    """
    cmtype = f'&cmtype={"|".join(types)}'
    base_url = f'{mw_instance}/w/api.php?action=query&format=json&list=categorymembers&cmtitle={cat_name}&cmlimit=500{cmtype}'
    cont = ''

    result = []

    while True:
        url = f'{base_url}&cmcontinue={cont}'
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r_json = r.json()

        if 'query' in r_json:
            for item in r_json['query']['categorymembers']:
                title = item['title']
                if clean_subcat_names and ':' in title:
                    # cut away ':' and evertyhing before
                    index_sep = title.index(':')
                    title = title[index_sep + 1:]
                # spaces need to be converted in links
                link = f'{mw_instance}/wiki/{title.replace(" ", "_")}'
                result.append({'name': title, 'link': link})

        if 'continue' not in r_json:
            break
        else:
            cont = r_json['continue']['cmcontinue']

    return result
Retrieve pages that belong to a given category.
        Args:
            cat_name: Category name e.g. 'Category:Presidents_of_the_United_States'.
            mw_instance: Which MediaWiki instance to use (the URL 'origin'). Defaults to 'https://en.wikipedia.org'.
            types: Which types of pages to retrieve. Defaults to `['page', 'subcat', 'file']`.
            clean_subcat_names: If `True`, removes the e.g. 'Category:' prefix of the titles. Defaults to `False`.
        Returns:
            Array of pages where a page is a dictionary of `{'name': 'some name', 'link': 'some absolute link'}`.