0

我正在尝试使用 Spotify API 抓取一些数据。当我搜索曲目名称“如果我不能”时,下面的代码可以正常工作并返回大量文本。API 输出的开头打印在我的网站上,如下所示:

在此处输入图像描述

除了开头的有趣的 b' 之外,它看起来像一本字典。我也不能像字典一样访问它。如果我尝试

返回原始数据['信息']

它引发了一个错误。同样,如果我试图找到它的类型(所以返回 type(raw_data) 而不是 return raw_data),页面会出现空白。

有没有办法以字典的形式保存 data.read() 的输出?使用

raw_data = ast.literal_eval(raw_data)

抛出一个错误。

#!/usr/local/bin/python3.2
# -*- coding: utf-8 -*-
import cherrypy
import numpy as np
import urllib.request

class Root(object):
    @cherrypy.expose
    def index(self):

            a_query = Query()
            text = a_query.search()

            return '''<html>
            Welcome to Spoti.py! %s
            </html>''' %text

class Query():

    def __init__(self):
        self.qstring = '''if i can't'''

    def space_to_plus(self):
        '''takes the instance var qstring
        replaces ' ' with '+' 
        -----------------------
        returns nothing'''

        self.qstring = self.qstring.replace(' ', '+')    

    def search(self):
        self.space_to_plus()

        url = 'http://ws.spotify.com/search/1/track.json?q=' + self.qstring
        data = urllib.request.urlopen(url)

        raw_data = data.read()

        #return raw_data['info']
        #return type(raw_data)

        return raw_data


cherrypy.config.update({
    'environment': 'production',
    'log.screen': False,
    'server.socket_host': '127.0.0.1',
    'server.socket_port': 15850,
    #'tools.encode.on': True,
    #'tools.encode.encoding': 'utf-8',
})

cherrypy.config.update({'tools.sessions.on': True})

cherrypy.quickstart(Root())
4

1 回答 1

1

你有一个 JSON 字符串。b开头的 表示您正在打印一个字节字符串文字。您需要做的是解析 JSON。只需这样做:

import json
...
info_dict = json.loads(raw_data)
于 2013-09-15T14:53:11.053 回答