Ошибка обработки Scrapinghub обнаружена в обработчике сигналов: - PullRequest
0 голосов
/ 29 января 2019

У меня есть сценарий Scrapy, который работает локально, но когда я развертываю его в Scrapinghub, он выдает все ошибки.После отладки ошибка приходит из-за выдачи элемента.

Это ошибка, которую я получаю.

ERROR   [scrapy.utils.signal] Error caught on signal handler: <bound method ?.item_scraped of <sh_scrapy.extension.HubstorageExtension object at 0x7fd39e6141d0>> Less
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 150, in maybeDeferred
    result = f(*args, **kw)
  File "/usr/local/lib/python2.7/site-packages/pydispatch/robustapply.py", line 55, in robustApply
    return receiver(*arguments, **named)
  File "/usr/local/lib/python2.7/site-packages/sh_scrapy/extension.py", line 45, in item_scraped
    item = self.exporter.export_item(item)
  File "/usr/local/lib/python2.7/site-packages/scrapy/exporters.py", line 304, in export_item
    result = dict(self._get_serialized_fields(item))
  File "/usr/local/lib/python2.7/site-packages/scrapy/exporters.py", line 75, in _get_serialized_fields
    value = self.serialize_field(field, field_name, item[field_name])
  File "/usr/local/lib/python2.7/site-packages/scrapy/exporters.py", line 284, in serialize_field
    return serializer(value)
  File "/usr/local/lib/python2.7/site-packages/scrapy/exporters.py", line 290, in _serialize_value
    return dict(self._serialize_dict(value))
  File "/usr/local/lib/python2.7/site-packages/scrapy/exporters.py", line 300, in _serialize_dict
    key = to_bytes(key) if self.binary else key
  File "/usr/local/lib/python2.7/site-packages/scrapy/utils/python.py", line 117, in to_bytes
    'object, got %s' % type(text).__name__)
TypeError: to_bytes must receive a unicode, str or bytes object, got int

Поле не содержит проблем, но в процессе устранения,Я понял, что это часть кода:

  try:
            item["media"] = {}
            media_index = 0

            media_content = response.xpath("//audio/source/@src").extract_first()
            if media_content is not None:
                item["media"][media_index] = {}
                preview = item["media"][media_index]
                preview["Media URL"] = media_content
                preview["Media Type"] = "Audio"
                media_index += 1
        except IndexError:
            print "Index error for media " + item["asset_url"]

Я прояснил некоторые части, чтобы облегчить их решение, но в основном эта часть является проблемой.Что-то, что не нравится в предмете.

Я новичок в Python и Scrapy.Извините, если это окажется глупой базовой ошибкой Python.Любая идея?

РЕДАКТИРОВАТЬ: Таким образом, после получения ответа от ThunderMind, решение было просто сделать str (media_index) для ключа

1 Ответ

0 голосов
/ 29 января 2019

Да, прямо здесь:

item["media"][media_index] = {}

media_index является изменяемым.и ключи не могут быть изменяемымиПрочитайте Python dict , чтобы узнать, что следует использовать в качестве ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...