Json数据: JavaScript Object Notation, 一种轻量型数据交换格式, 便于阅读和交换数据。
Json常用方法:
使用 Json 函数需要导入 json 库:import json。
方法:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None,separators=None,
encoding="utf-8", default=None, sort_keys=False, **kw)
json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
案例:
import json
# python对象编码成为json的数据格式
d = dict(a=1, b=2, c=3)
jsonDict = json.dumps(d)
print(jsonDict,type(jsonDict))
li = [1,2,3,4]
jsonLi = json.dumps(li)
print(jsonLi,type(jsonLi))
# python对象编码成为json格式,并保存到指定文件中
with open('doc/test.json','w') as f:
# indent: 是否设置缩进; sort_keys: 是否对key值进行排序;
# separators = {"每个元素之间的分隔符", “key和value值之间的分隔符”}
json.dump(d,f,indent=4,sort_keys=True,separators=(',',': '))
# json对象编码成为python的数据格式
pythonDict = json.loads(jsonDict)
print(pythonDict,type(pythonDict))
# 存储在json文件中的json对象编码成为python的数据格式
with open('doc/test.json') as f:
pythonObj = json.load(f)
print(pythonObj,type(pythonObj))
文件test.json中:
通过python获取指定ip的地理位置:
网上有很多API接口, 直接可以返回json格式的数据
根据IP查询所在地、运营商等信息的一些API如下(不一定都能用):
1. 淘宝的API(推荐):http://ip.taobao.com/service/getIpInfo.php?ip=110.84.0.129
2. 国外 freegeoip.net(推荐):http://freegeoip.net/json/110.84.0.129 这个还提供了经纬度信息
3. 新浪的API:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=110.84.0.129
4. 腾讯的网页查询(返回的非json格式): http://ip.qq.com/cgi-bin/searchip?searchip1=110.84.0.129
5. ip.cn的网页(返回的非json格式):http://www.ip.cn/index.php?ip=110.84.0.129
6. ip-api.com: http://ip-api.com/json/110.84.0.129
上述的API接口,大多有一个特点是, 返回的直接是个json格式
代码:
import json
from urllib.request import urlopen
# 1. 简单的爬虫
url = 'http://ip-api.com/json/110.84.0.129'
urlObj = urlopen(url)
# 服务端返回的页面信息,此处为字符串类型
pageContent = urlObj.read().decode('utf-8')
print(pageContent)
print(type(pageContent))
# 2.处理json数据
# 将json数据格式解码为python可以识别的对象
dict_pageContent = json.loads(pageContent)
print(dict_pageContent)
print(type(dict_pageContent))
print("""
所在城市:%s
所在国家:%s
""" %(dict_pageContent['city'],dict_pageContent['country']))
urllib.request: urllib 的 request 模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应