【问题标题】:how to implement nested item in scrapy?如何在scrapy中实现嵌套项?
【发布时间】:2012-06-26 10:14:09
【问题描述】:

我正在抓取一些具有复杂分层信息的数据,需要将结果导出到 json。

我将项目定义为

class FamilyItem():
    name = Field()
    sons = Field()

class SonsItem():
    name = Field()
    grandsons = Field()

class GrandsonsItem():
    name = Field()
    age = Field()
    weight = Field()
    sex = Field()

当蜘蛛运行完成时,我会得到一个打印的项目输出,如

{'name': 'Jenny',
   'sons': [
            {'name': u'S1',
             'grandsons': [
                   {'name': u'GS1',
                    'age': 18,
                    'weight': 50
                   },
                   {
                    'name':u'GS2',
                    'age': 19,
                    'weight':51}]
                   }]
}

但是当我运行scrapy crawl myscaper -o a.json 时,它总是说结果“不是 JSON 可序列化的”。然后我将项目输出复制并粘贴到 ipython 控制台并使用 json.dumps(),它工作正常。那么问题出在哪里?这让我发疯了......

【问题讨论】:

    标签: python json scrapy


    【解决方案1】:

    保存嵌套项时,请确保将它们包装在对 dict() 的调用中,例如:

    gs1 = GrandsonsItem()
    gs1['name'] = 'GS1'
    gs1['age'] = 18
    gs1['weight'] = 50
    
    gs2 = GrandsonsItem()
    gs2['name'] = 'GS2'
    gs2['age'] = 19
    gs2['weight'] = 51
    
    s1 = SonsItem()
    s1['name'] = 'S1'
    s1['grandsons'] = [dict(gs1), dict(gs2)]
    
    jenny = FamilyItem()
    jenny['name'] = 'Jenny'
    jenny['sons'] = [dict(s1)]
    

    【讨论】:

    • 先生,您应该得到一块饼干! ?
    【解决方案2】:

    不确定是否有办法使用类在scrapy 中执行嵌套项,但数组可以正常工作。你可以这样做:

    grandson = Grandson(name = 'Grandson', age = 2)
    
    son = Son(name = 'Son', grandsons = [grandson])
    
    item = Item(name = 'Name', son = [son])
    

    【讨论】:

      猜你喜欢
      • 2016-07-09
      • 2017-01-29
      • 2017-12-29
      • 2012-12-09
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2023-01-31
      相关资源
      最近更新 更多