############################# 第一步 获取 IP ##########################################################
import urllib.request # urllib 用法:https://www.runoob.com/python3/python-urllib.html
import re # 正则表达式模块
url = 'http://jsonip.com' # 浏览器打开 http://jsonip.com 看看返回什么?
respones = urllib.request.urlopen(url) # 获得网站返回
data = respones.read() # 读取网站返回详细内容,仔细点可以 在每一个 data 后 print(data) ,看看有什么变化
data = data.decode("utf-8") # 网页转码,这时看起来是这样的 {"ip":"xxx.xxx.xxx.xxx","geo-ip":"https://getjsonip.com/#plus","API Help":"https://getjsonip.com/#docs"}
data = data.split(",") # 按逗号分隔为数组
data = data[0] # 选定数组第一段 {"ip":"xxx.xxx.xxx.xxx"
ip = data[7:-1] # 截取第八到倒数第二个字符
print('当前公网IP: ',ip)
############################# 第二步 将上面获得IP组合成如下格式网址后查询,返回网页的title部分包含城市信息
url = 'http://www.882667.com/ip_' + ip + '.html' # 组合网址 http://www.882667.com/ip_xxx.xxx.xxx.xxx.html
respones = urllib.request.urlopen(url)
data = respones.read()
data = data.decode("utf-8")
data = re.findall('<title>(.+)</title>',data) # 正则表达式 获得 title
data = str(data[0]) # 数组转换为字符串 ,笨办法 city = data[16:23] 直接获得城市,考虑到城市名长度变化,继续截取字符串
data = data.split('_') # 按 _ 分割为数组
data = str(data[1]) # 将数组 第2个 转换为字符串
data = data.split(' ') # 按 空格 分割为数组
city = str(data[0]) # 将数组 第1个 转换为字符串
print('当前城市是: ',city)