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)基础知识和实战详解

scrapy--模拟登陆

导入 config.json 文件时打字稿总是出错

使用 Webpack 4.5 + Babel 6 + React 16 导入 JSON 时出错

使用Scrapy命令行工具导出JSON文件时编码设置

scrapy基础知识之 scrapy 三种模拟登录策略: