天行数据api接口数据搜索问题

2019/12/3

天行数据"垃圾分类"Python版api接口问题。(Python版本、中文字符)

0.天行数据提供api接口,利用这些可以做一些事情,比如做个Web端垃圾查询的功能。
1.以下是天行数据参考代码中Python的实例,不过很明显,这是Python2的例子。

# -*- coding: utf-8 -*-
import sys, urllib, urllib2, json

url = 'http://api.tianapi.com/txapi/lajifenlei/index?key=APIKEY&word=眼镜'

req = urllib2.Request(url)

resp = urllib2.urlopen(req)
content = resp.read()
if(content):
    print(content)

2.经过改写,Python3版本如下:

import urllib.request
key = '************'
word = '手机'
url = "http://api.tianapi.com/txapi/lajifenlei/index?key={}&word={}".format(key, word)
req = urllib.request.urlopen(url)
content = req.read()
if(content):
    print(content)

Python3中已没有urllib2,只有urllib,所以需要修改代码,导入包时,需要直接导入request,
但是代码出现错误,如下:

File "E:/PyCharmCode/pycharm_Code/01/garbage_sort.py", line 29, in 
    req = urllib.request.urlopen(url)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 50-51: ordinal not in range(128)

应该是url编码问题,猜测是中文字符"手机"的问题,将word=“手机”,换成word=‘iphone’,成功获取到结果。
虽然得到结果,确实是非中文字符,对content内容进行utf-8解码:content = req.read().decode(“utf-8”),得到中文结果。
也确定了问题是url中含有中文,查看Python官网3.7.5版本的文档,提到:

"以百分比编码的ASCII文本字符串。
如果将结果字符串用作通过urlopen()函数进行POST操作的数据,则应将其编码为字节,否则将导致TypeError。"

原来是需要将url字符串转为百分比编码,原因是中文字符串无法编码成为ascii码。
所以我们只需要对中文进行百分号编码之后,就可以encode为ascii了。
Python3中我们可以在urllib.request找到官方提供的与中文编码相关的函数:quote()。


3.最终代码如下:

import json
import urllib.request

key = '************'
word = '手机'
word_quote = urllib.request.quote(word)
url = "http://api.tianapi.com/txapi/lajifenlei/index?key={}&word={}".format(key, word_quote)
req = urllib.request.urlopen(url)
content = req.read().decode("utf-8") 
jsonResponse = json.loads(content)  # 将数据转化为json格式
print(jsonResponse)

4.以上代码中key的值需要注册天行数据账号获取。

你可能感兴趣的:(Python,python)