Scrapy - 导入JSON时出错

时间:2014-01-28 03:40:13

标签: python json scrapy

我是Python和Scrapy的新手,但已经能够进行一些基本的网络抓取。但是,我遇到导入JSON数据的问题。我在代码之后发布了回溯。

以下是我正在使用的代码。

from scrapy.spider import Spider
import json

class myspider(Spider):
    name = "jsontest"
    allowed_domains = ["data.sportsillustrated.cnn.com"]
    start_urls = ['http://data.sportsillustrated.cnn.com/jsonp/basketball/nba/gameflash/2012/11/20/32128_playbyplay.json']

    def parse(self, response):
        jsonresponse = json.loads(response.body_as_unicode())
        print jsonresponse 

追踪(最近一次通话):           在mainLoop中的文件“C:\ Python27 \ lib \ site-packages \ twisted \ internet \ base.py”,第1201行             self.runUntilCurrent()           在runUntilCurrent中的文件“C:\ Python27 \ lib \ site-packages \ twisted \ internet \ base.py”,第824行             call.func(* call.args,** call.kw)           回调文件“C:\ Python27 \ lib \ site-packages \ twisted \ internet \ defer.py”,第382行             self._startRunCallbacks(结果)           文件“C:\ Python27 \ lib \ site-packages \ twisted \ internet \ defer.py”,第490行,在_startRunCallbacks中             self._runCallbacks()         --- ---           _runCallbacks中的文件“C:\ Python27 \ lib \ site-packages \ twisted \ internet \ defer.py”,第577行             current.result = callback(current.result,* args,** kw)           文件“jsontest \ spiders \ jsontest.py”,第10行,在解析中             jsonresponse = json.loads(response.body_as_unicode())           文件“C:\ Python27 \ lib \ json__init __。py”,第338行,在加载中             return _default_decoder.decode(s)           在解码中文件“C:\ Python27 \ lib \ json \ decoder.py”,第365行             obj,end = self.raw_decode(s,idx = _w(s,0).end())           在raw_decode中输入文件“C:\ Python27 \ lib \ json \ decoder.py”,第383行             提出ValueError(“无JSON对象可被解码”)         exceptions.ValueError:无法解码JSON对象

1 个答案:

答案 0 :(得分:4)

它是一个jsonp响应,请参阅What is JSONP all about?这是解析它的一种好方法:

>>> jsonp = response.body
>>> j = jsonp[ jsonp.index("(") + 1 : jsonp.rindex(")") ]
>>> json.loads(j)

另见this codereview link