Rya*_* Yu 26 python urlopen python-3.x
只是试图测试非常简单的Python JSON命令,但我遇到了一些麻烦.
urlopen('http://www.similarsitesearch.com/api/similar/ebay.com').read()
Run Code Online (Sandbox Code Playgroud)
应该输出
'{"num":20,"status":"ok","r0":"http:\\/\\/www.propertyroom.com\\/","r1":"http:\\/\\/www.ubid.com\\/","r2":"http:\\/\\/www.bidcactus.com\\/","r3":"http:\\/\\/www.etsy.com\\/","r4":"http:\\/\\/us.ebid.net\\/","r5":"http:\\/\\/www.bidrivals.com\\/","r6":"http:\\/\\/www.ioffer.com\\/","r7":"http:\\/\\/www.shopgoodwill.com\\/","r8":"http:\\/\\/www.beezid.com\\/","r9":"http:\\/\\/www.webidz.com\\/","r10":"http:\\/\\/www.auctionzip.com\\/","r11":"http:\\/\\/www.overstock.com\\/","r12":"http:\\/\\/www.bidspotter.com\\/","r13":"http:\\/\\/www.paypal.com\\/","r14":"http:\\/\\/www.ha.com\\/","r15":"http:\\/\\/www.onlineauction.com\\/","r16":"http:\\/\\/bidz.com\\/","r17":"http:\\/\\/www.epier.com\\/","r18":"http:\\/\\/www.sell.com\\/","r19":"http:\\/\\/www.rasmus.com\\/"}'
Run Code Online (Sandbox Code Playgroud)
但我得到了相同的字符串,b
前面有一个字符串:
b'{"num":20,"status":"ok","r0":"http:\\/\\/www.propertyroom.com\\/","r1":"http:\\/\\/www.ubid.com\\/","r2":"http:\\/\\/www.bidcactus.com\\/","r3":"http:\\/\\/www.etsy.com\\/","r4":"http:\\/\\/us.ebid.net\\/","r5":"http:\\/\\/www.bidrivals.com\\/","r6":"http:\\/\\/www.ioffer.com\\/","r7":"http:\\/\\/www.shopgoodwill.com\\/","r8":"http:\\/\\/www.beezid.com\\/","r9":"http:\\/\\/www.webidz.com\\/","r10":"http:\\/\\/www.auctionzip.com\\/","r11":"http:\\/\\/www.overstock.com\\/","r12":"http:\\/\\/www.bidspotter.com\\/","r13":"http:\\/\\/www.paypal.com\\/","r14":"http:\\/\\/www.ha.com\\/","r15":"http:\\/\\/www.onlineauction.com\\/","r16":"http:\\/\\/bidz.com\\/","r17":"http:\\/\\/www.epier.com\\/","r18":"http:\\/\\/www.sell.com\\/","r19":"http:\\/\\/www.rasmus.com\\/"}'
Run Code Online (Sandbox Code Playgroud)
随后,当我试着跑
json.loads(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read())
Run Code Online (Sandbox Code Playgroud)
它给了我错误信息:
TypeError:不能在类字节对象上使用字符串模式"
我假设与之有关b
?
我urlopen
从中导入urllib.request
,我正在运行Python 3.
有任何想法吗?
arv*_*man 31
read()中的内容是字节类型,因此您需要在尝试将其解码为json对象之前将其转换为字符串.
要将字节转换为字符串,请将代码更改为:
urlopen('http://similarsitesearch.com/api/similar/ebay.com').read().decode("utf-8")
它工作得很好:
def myView(request):
encoding = request.read().decode("utf-8")
dic = json.loads(encoding)
print(dic)
Run Code Online (Sandbox Code Playgroud)
您需要检查Content-Type
标头中指定的字符集,然后在传递之前解码json.load*()
.
urllib 返回一个字节数组,我认为这是 py3 中的默认值,而 json 需要一个字符串。在调用 json 调用之前,尝试将返回值包装在 str() 调用中
j = str(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read())
json.loads(j)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19743 次 |
最近记录: |