Scrapy - 导入 JSON 时出错
Posted
技术标签:
【中文标题】Scrapy - 导入 JSON 时出错【英文标题】:Scrapy - Error Importing JSON 【发布时间】:2014-02-19 04:58:35 【问题描述】:我对 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
Traceback(最近一次调用最后一次): 文件“C:\Python27\lib\site-packages\twisted\internet\base.py”,第 1201 行,在 mainLoop 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(结果) _startRunCallbacks 中的文件“C:\Python27\lib\site-packages\twisted\internet\defer.py”,第 490 行 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 行,加载中 返回 _default_decoder.decode(s) 解码中的文件“C:\Python27\lib\json\decoder.py”,第 365 行 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 文件“C:\Python27\lib\json\decoder.py”,第 383 行,在 raw_decode raise ValueError("没有 JSON 对象可以被解码") exceptions.ValueError: 无法解码 JSON 对象
【问题讨论】:
你能告诉我们完整的追溯吗? 运行curl --head http://data.sportsillustrated.cnn.com
返回 403。在浏览器中单击链接会返回一个空白页面,所以我认为这不是用户代理问题。您可能需要调整参数。
我已添加回溯。如果您转到 url,您会注意到 JSON 被包装在 callbackWrapper 中。这会导致我的问题吗?
【参考方案1】:
它是一个 jsonp 响应,请参阅 What is JSONP all about? 这是解析它的一种好方法:
>>> jsonp = response.body
>>> j = jsonp[ jsonp.index("(") + 1 : jsonp.rindex(")") ]
>>> json.loads(j)
另见this codereview link
【讨论】:
非常感谢。在我发布之后,我意识到它可能与 callbackWrapper 有关。非常感谢您的帮助。以上是关于Scrapy - 导入 JSON 时出错的主要内容,如果未能解决你的问题,请参考以下文章
Python3分布式爬虫(scrap+redis)基础知识和实战详解