Here's code from the whatismyip Python module that can grab it from public websites:
import urllib.request
IP_WEBSITES = (
           'https://ipinfo.io/ip',
           'https://ipecho.net/plain',
           'https://api.ipify.org',
           'https://ipaddr.site',
           'https://icanhazip.com',
           'https://ident.me',
           'https://curlmyip.net',
           )
def getIp():
    for ipWebsite in IP_WEBSITES:
        try:
            response = urllib.request.urlopen(ipWebsite)
            charsets = response.info().get_charsets()
            if len(charsets) == 0 or charsets[0] is None:
                charset = 'utf-8'  # Use utf-8 by default
            else:
                charset = charsets[0]
            userIp = response.read().decode(charset).strip()
            return userIp
        except:
            pass  # Network error, just continue on to next website.
    # Either all of the websites are down or returned invalid response
    # (unlikely) or you are disconnected from the internet.
    return None
print(getIp())
Or you can install pip install whatismyip and then call whatismyip.whatismyip().