A function that returns a dict representation of the Runeforge.gg page for a specific champ

    Parameters
    ----------
    html : str
        The string representation of the html obtained via a GET request

    url : str
        The URL for the runeforge page being parsed.

    Returns
    -------
    dict
        Contains champ rune info described in ``RuneClient`` and ``AioRuneClient``.

def parse_rune_html(html: str, url: str) -> dict:
    """A function that returns a dict representation of the Runeforge.gg page for a specific champ

    Parameters
    ----------
    html : str
        The string representation of the html obtained via a GET request

    url : str
        The URL for the runeforge page being parsed.

    Returns
    -------
    dict
        Contains champ rune info described in ``RuneClient`` and ``AioRuneClient``.
    """
    soup = BeautifulSoup(html, 'lxml')

    # The soup stuff
    champ = soup.find('h1', class_='champion-header--title').text
    title = soup.find('h2', class_='loadout-title').text
    description = soup.find('p').text
    # Names of the Rune trees
    p_tree, s_tree = [x.text for x in soup.find_all('h2', class_='rune-path--name')]
    # List of all the runes together
    all_runes = soup.find_all('a', class_='rune-name')
    # The keystone (duh)
    keystone = all_runes[0].text
    # Rest of the runes in the primary tree, sans keystone
    p_rest = [x.text for x in all_runes[1:4]]
    # The runes in the secondary tree
    s_rest = [x.text for x in all_runes[4:7]]

    return {'name': champ, 'title': title, 'description': description, 'url': url,
            'runes': {'primary': {'name': p_tree, 'keystone': keystone, 'rest': p_rest},
                      'secondary': {'name': s_tree, 'rest': s_rest}}}