2016-03-16 6 views
1

Я сделал трубопровод, чтобы поместить данные Scrapy в мой Разбор BackendScrapy трубопровода к Разбираем

PARSE = 'api.parse.com' PORT = 443

Однако, я не могу найти правильный способ публикации данных в Parse. Потому что каждый раз он создает неопределенные объекты в моей базе данных.

class Newscrawlbotv01Pipeline(object): 
    def process_item(self, item, spider): 
     for data in item: 
      if not data: 
       raise DropItem("Missing data!") 
     connection = httplib.HTTPSConnection(
      settings['PARSE'], 
      settings['PORT'] 
     ) 
     connection.connect() 
     connection.request('POST', '/1/classes/articlulos', json.dumps({item}), { 
     "X-Parse-Application-Id": "XXXXXXXXXXXXXXXX", 
     "X-Parse-REST-API-Key": "XXXXXXXXXXXXXXXXXXX", 
     "Content-Type": "application/json" 
    }) 
     log.msg("Question added to PARSE !", level=log.DEBUG, spider=spider) 
     return item 

Пример ошибки:

TypeError: set([{'image': 'http://apps.site.lefigaro.fr/sites/apps/files/styles/large/public/thumbnails/image/sport24.png?itok=caKsKUzV', 
'language': 'FR', 
'publishedDate': datetime.datetime(2016, 3, 16, 21, 53, 10, 289000), 
'publisher': 'Le Figaro Sport', 
'theme': 'Sport', 
'title': u'Pogba aurait rencontr\xe9 les dirigeants du PSG', 
'url': u'sport24.lefigaro.fr/football/ligue-des-champions/fil-info/prolongation-entre-le-bayern-et-la-juve-796778'}]) is not JSON serializable 
+0

ваш журнал говорит 'connection.request ('POST', '/ 1/классы/articlulos', json.dumps ({}) данных, {' в то время как ваш код ' connection.request ('POST', '/ 1/classes/articlulos', json.dumps ({item}), {', вы даете плохие примеры? – eLRuLL

+0

О да, жаль, что это была ошибка, когда connection.request ('POST ','/1/classes/articlulos ', json.dumps ({item}), {was ({data}) –

+0

не удалось изменить ваш вопрос? (Отредактировать его) – eLRuLL

ответ

0

Я нашел решение

class Newscrawlbotv01Pipeline(object): 
def process_item(self, item, spider): 
    for data in item: 
     if not data: 
      raise DropItem("Missing data!") 
    connection = httplib.HTTPSConnection(
     settings['PARSE'], 
     settings['PORT'] 
    ) 

    connection.connect() 
    connection.request('POST', '/1/classes/Articles', json.dumps(dict(item)), { 
    "X-Parse-Application-Id": "WW", 
    "X-Parse-REST-API-Key": "WW", 
    "Content-Type": "application/json" 
}) 
    log.msg("Question added to PARSE !", level=log.DEBUG, spider=spider) 
    return item 
    #self.collection.update({'url': item['url']}, dict(item), upsert=True) 
0

Похоже, у вас есть set внутри item['data'], который не принимается на JSON.

Вам необходимо изменить это поле обратно в список, прежде чем пытаться сделать его приемлемым для JSON.

+0

не окружает 'item'' {} ', просто передайте элемент – eLRuLL

+0

Я передал элемент json.dumps (item), но это та же ошибка: TypeError: {'image': 'http://apps.site.lefigaro.fr/sites/app s/files/styles/large/public/thumbnails/image/sport24.png? itok = caKsKUzV ', ' language ':' FR ', ' publishedDate ': datetime.datetime (2016, 3, 16, 22, 10 , 'Издатель': 'Le Figaro Sport', 'тема': 'Спорт', 'title': u'Une affiche du Bayern choque la communaut \ xe9 juive italienne ', ' url ' : u'sport24.lefigaro.fr/tennis/atp/fil-info/gasquet-je-sais-que-mon-meilleur-niveau-reviendra-796780 '} не является сериализуемым JSON –

+0

та же ошибка, 'datetime' не является сериализуемым , вам придется отформатировать его как строку – eLRuLL