JSONDecodeError with Scrapy: ожидаемое значение: строка 1, столбец 1 (символ 0) - PullRequest
0 голосов
/ 19 мая 2019

Я использую запросы, чтобы получить и проанализировать некоторые данные, очищенные с помощью Scrapy с Scrapyrt (очистка в реальном времени).

Вот как я это делаю:

#pass spider to requests parameters # 
params = {
        'spider_name': spider,
        'start_requests':True
        }
# scrape items
response = requests.get('http://scrapyrt:9080/crawl.json', params)
print ('RESPONSE JSON',response.json())
data = response.json()

Согласно документации Scrapy , с параметром 'start_requests', установленным как True, паук автоматически запрашивает URL-адреса и передает ответ методу разбора, который является методом по умолчанию, используемым для анализа запросов.

start_requests

тип: логическое значение

опционально

Должен ли паук выполнять метод Scrapy.Spider.start_requests. start_requests выполняется по умолчанию, когда вы обычно запускаете Scrapy Spider без ScrapyRT, но этот метод НЕ по умолчанию выполняется в API. По умолчанию мы предполагаем, что spider должен сканировать ТОЛЬКО URL, указанный в параметрах, без выполнения каких-либо запросов к start_urls, определенным в классе Spider. Аргумент start_requests переопределяет это поведение. Если этот аргумент присутствует, API выполнит метод start_requests Spider .

Но настройка не работает. Войти:

[2019-05-19 06:11:14,835: DEBUG/ForkPoolWorker-4] Starting new HTTP connection (1): scrapyrt:9080
[2019-05-19 06:11:15,414: DEBUG/ForkPoolWorker-4] http://scrapyrt:9080 "GET /crawl.json?spider_name=precious_tracks&start_requests=True HTTP/1.1" 500 7784
[2019-05-19 06:11:15,472: ERROR/ForkPoolWorker-4] Task project.api.routes.background.scrape_allmusic[87dbd825-dc1c-4789-8ee0-4151e5821798] raised unexpected: JSONDecodeError('Expecting value: line 1 column 1 (char 0)',)
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/celery/app/trace.py", line 382, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/celery/app/trace.py", line 641, in __protected_call__
    return self.run(*args, **kwargs)
  File "/usr/src/app/project/api/routes/background.py", line 908, in scrape_allmusic
    print ('RESPONSE JSON',response.json())
  File "/usr/lib/python3.6/site-packages/requests/models.py", line 897, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Любая помощь в исправлении этой ошибки будет принята с благодарностью.

1 Ответ

0 голосов
/ 27 мая 2019

Ошибка произошла из-за ошибки с Twisted 19.2.0, зависимостью scrapyrt, которая предполагала, что ответ имеет неправильный тип.

Как только я установил Twisted==18.9.0, все заработало.

...