【问题标题】:Scrapy Pipeline to Parse用于解析的 Scrapy 管道
【发布时间】:2016-03-16 19:24:33
【问题描述】:

我创建了一个管道将抓取数据放入我的 Parse 后端

解析 = 'api.parse.com' 端口 = 443

但是,我找不到在 Parse 中发布数据的正确方法。因为每次它都会在我的 Parse DB 中创建未定义的对象。

 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

【问题讨论】:

  • 您的日志显示connection.request('POST', '/1/classes/articlulos', json.dumps({data}), {,而您的代码为connection.request('POST', '/1/classes/articlulos', json.dumps({item}), {,您是否给出了不好的例子?
  • 哦,是的,对不起,当 connection.request('POST', '/1/classes/articlulos', json.dumps({item}), { 是 ({data})
  • 你能更新你的问题吗? (编辑)

标签: python parse-platform scrapy scrapy-pipeline


【解决方案1】:

看起来您在 item['data'] 内有一个 set,这在 JSON 上不被接受。

在尝试使其 JSON 可接受之前,您需要将该字段更改回列表。

【讨论】:

  • 不要用item包围{},直接传递项目
  • 我通过了项目 json.dumps(item) 但它是同样的错误: TypeError: {'image': 'apps.site.lefigaro.fr/sites/apps/files/styles/large/public/…', 'language': 'FR', 'publishedDate': datetime .datetime(2016, 3, 16, 22, 10, 43, 146000), 'publisher': 'Le Figaro Sport', 'theme': '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 可序列化的跨度>
  • 同样的错误,datetime 不可序列化,您必须将其格式化为字符串
【解决方案2】:

我找到了解决办法

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)

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    相关资源
    最近更新 更多