def get_info(tag, label, how):
    """Get information from a tag.

    Parameters
    ----------
    tag : bs4.element.Tag
        The data object to find the information from.
    label : str
        The name of the tag to get information from.
    how : {'raw', 'all' , 'txt', 'str'}
        Method to use to get the information.
            raw      - get an embedded tag
            str      - get text and convert to string
            all      - get all embedded tags
            all-str  - get all embedded tags, and convert to string
            all-list - get all embedded tags, and collect into a list

    Returns
    -------
    {bs4.element.Tag, bs4.element.ResultSet, unicode, str, None}
        Requested data from the tag. Returns None is requested tag is unavailable.
    """

    if how not in ['raw', 'str', 'all', 'all-str', 'all-list']:
        raise ValueError('Value for how is not understood.')

    # Use try to be robust to missing tag
    try:
        if how == 'raw':
            return tag.find(label)
        elif how == 'str':
            return tag.find(label).text
        elif how == 'all':
            return tag.find_all(label)
        elif how == 'all-str':
            return ' '.join([part.text for part in tag.find_all(label)])
        elif how == 'all-list':
            return [part.text for part in tag.find_all(label)]

    except AttributeError:
        return None