2014-01-28 112 views
0

我对Python和Scrapy相当陌生,但已经能够进行一些基本的网页抓取。但是,我遇到导入JSON数据的问题。我在代码后发布了回溯。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 

回溯(最近通话最后一个): 文件 “C:\ Python27 \ LIB \站点包\扭曲\网络\ base.py”,线1201,在主循环 self.runUntilCurrent() 文件“C:\ Python27 \ lib \ site-packages \ twisted \ internet \ base.py”,行824,在runUntilCurrent call.func(* call.args,** call.kw) 文件“C:\ Python27 \ lib \ site-packages \ twisted \ internet \ defer.py“,第382行,回调 self._startRunCallbacks(result) 文件”C:\ Python27 \ lib \ site-packages \ twisted \ internet \ defer.py“ 490行,在_startRunCallbacks self._runCallbacks() --- --- 文件“C:\ Python27 \ lib \ site-packages \ twisted \ internet \ defer.py”,第577行,在_runCallbacks中 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行 raise ValueError(“No JSON object could be decoding”) excepti ons.ValueError:没有JSON对象可以解码

+0

你能告诉我们全tracback? –

+0

运行'curl --head http:// data.sportsillustrated.cnn.com'会返回一个403.点击浏览器中的链接返回一个空白页面,所以我不认为这是一个用户代理问题。您可能需要调整您的参数。 – verbsintransit

+0

我已添加回溯。如果你转到url,你会注意到JSON被封装在一个callbackWrapper中。这可能会导致我的问题? – Neil

回答

4

它是一个JSONP响应,见What is JSONP all about?这里的解析它一个好办法:

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

也看到this codereview link

+0

非常感谢。在发布之后,我意识到它可能与callbackWrapper有关。我非常感谢你的帮助。 – Neil