2014-01-28 7 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 

Traceback (самый последний вызов последнего): Файл "C: \ python27 \ Lib \ сайт-пакеты \ скручены \ Интернет \ 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 (результат) Файл" 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, в parse jsonresponse = json.loads (response.body_as_unicode()) Файл «C: \ Python27 \ lib \ json__init __. py», строка 338 , в нагрузках return _default_decoder.decode (ы) Файл «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 повышает значение ValueError («Нет объекта JSON может быть декодирован») 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