26

非常に単純なPythonJSONコマンドをテストしようとしていますが、問題が発生しています。

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:バイトのようなオブジェクトで文字列パターンを使用することはできません」

私はこれが何かと関係があると思いbますか?

からインポートurlopenurllib.request、Python3を実行しています。

何か案は?

4

5 に答える 5

32

read() からのコンテンツはバイト型であるため、json オブジェクトにデコードする前に文字列に変換する必要があります。

バイトを文字列に変換するには、コードを次のように変更します。 urlopen('http://similarsitesearch.com/api/similar/ebay.com').read().decode("utf-8")

于 2012-12-12T17:29:35.853 に答える
0

バイト リテラルのように見えます。http でデータを取得する方法、または API がヘッダーでデータを返す方法を調べてください。

于 2012-06-01T07:31:41.500 に答える
0

urllib はバイト配列を返しています。これは py3 のデフォルトであり、json は文字列を期待しています。json 呼び出しを呼び出す前に、戻り値を str() 呼び出しでラップしてみてください

j = str(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read())
json.loads(j)
于 2012-06-01T07:29:22.817 に答える