Вопрос по python – Использовать «байтовоподобный объект» из urlopen.read с JSON?

26

Просто пытаюсь протестировать очень простые команды Python JSON, но у меня возникли некоторые проблемы.

urlopen('http://www.similarsitesearch.com/api/similar/ebay.com').read()

должен выводить

'{"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\\/"}'

но я получаю ту же строку, с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\\/"}'

Впоследствии, когда я пытаюсь запустить

json.loads(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read())

это дает мне сообщение об ошибке:

TypeError: can't use a string pattern on a bytes-like object"

Я полагаю, что это как-то связано сb?

Я импортировалurlopen отurllib.requestи я использую Python 3.

Есть идеи?

Ваш Ответ

5   ответов
7

def myView(request):
    encoding = request.read().decode("utf-8")
    dic = json.loads(encoding)
    print(dic)
6

Content-Type заголовок и декодировать, перед тем как передать егоjson.load*().

Error: User Rate Limit Exceeded Ryan Yu
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededurllib.urlopen().read()Error: User Rate Limit ExceededjsonError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
31

bytes поэтому вам нужно преобразовать его в строку, прежде чем пытаться декодировать его в объект json.

Преобразоватьbytes в строку, измените свой код на: urlopen('http://similarsitesearch.com/api/similar/ebay.com').read().decode("utf-8")

0

байтовый литерал, Изучите, как вы получаете данные с помощью http или как API возвращает данные в заголовках.

0

который, как я полагаю, используется по умолчанию в py3, а json ожидает строку. Попробуйте обернуть возвращаемое значение в вызов str () перед вызовом вызова json

j = str(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read())
json.loads(j)
Error: User Rate Limit Exceeded Ryan Yu
Error: User Rate Limit Exceededstr()Error: User Rate Limit ExceededbytesError: User Rate Limit ExceededstrError: User Rate Limit Exceeded

Похожие вопросы