urllib 是 Python 标准库中的一个,专门用来发送网络请求。

特别需要注意的是在 Python 3 中,urllib2 与 urllib 合并了,所以直接引入 urllib 就好了。

Get 请求示例

这里以调用极速数据的黄历 API 为例。

import urllib.parse, urllib.request, json

data = dict()
data['appkey'] = 'abcdefghijklmn'
data["year"] = 2020
data["month"] = 2
data["day"] = 22

params = urllib.parse.urlencode(data)
url = "http://api.jisuapi.com/huangli/date?" + params
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as f:
    get_data = json.loads(f.read().decode('utf-8'))

if get_data['status'] != 0:
    print(get_data['msg'])
    exit()

res = get_data['result']

print(res)

结果:

{'year': '2020', 'month': '2', 'day': '22', 'yangli': '公元2020年02月22日', 'nongli': '农历二〇二〇年正月廿九', 'star': '双鱼座', 'taishen': '碓磨厕房内北', 'wuxing': '沙石金', 'chong': '冲(己丑)牛', 'sha': '煞西', 'shengxiao': '鼠', 'jiri': '玉堂执日', 'zhiri': '玉堂(黄道日)', 'xiongshen': '灾煞 天火 大煞 天刑', 'jishenyiqu': '月德 四相 时德 民日 天巫 福德 鸣犬', 'caishen': '东北', 'xishen': '西北', 'fushen': '东南', 'suici': ['庚子年', '戊寅月', '乙未日'], 'yi': ['订婚', '结婚', '开光', '出行', '理发', '会亲友', '开工', '安床', '栽种', '牧养', '入殓', '移柩', '启钻', '嫁娶', '纳采', '开张', '开业', '开市'], 'ji': ['谢土', '祈福', '上梁', '作灶', '斋醮', '装修', '入宅', '安门', '修造'], 'eweek': 'SATURDAY', 'emonth': 'February', 'week': '六'}

代码解析:

  1. 首先将参数写入一个字典;
  2. 然后使用 urllib.parse.urlencode 将字典中的参数转换成可以附加到请求链接中的格式;
  3. 使用 urllib.request.Request 发送请求;
  4. 使用 urllib.request.urlopen(req) 解析请求返回的数据;
  5. 将数据转换成 json 格式;