我是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对象
答案 0 :(得分:4)
它是一个jsonp响应,请参阅What is JSONP all about?这是解析它的一种好方法:
>>> jsonp = response.body
>>> j = jsonp[ jsonp.index("(") + 1 : jsonp.rindex(")") ]
>>> json.loads(j)