【问题标题】:Scrapy/ item loader / How to load items in order?Scrapy/项目加载器/如何按顺序加载项目?
【发布时间】:2014-10-03 09:31:06
【问题描述】:

我正在尝试废弃以下地图坐标,我的坐标为 var Data = {lat: 45.000000, long : 68.00000}

我可以将上述数据项 'lng':68.0000 和 'lat':45.0000 作为单独的项目废弃。 并且还将它们放入一个新的密钥“loc”中作为“loc”:{“lat”:45.0000,long:68.000000}。我正在尝试将这些刮掉的项目存储到 MongoDb 中。在 Mongodb 中,我需要特定顺序的“lng”和“lat”值(坐标),因此 Mongodb 会将它们识别为地理位置。 Mongodb首先需要'lng',然后是'lat'。

我该怎么做?有人可以帮我吗?

这是我的物品文件

class Citylist(scrapy.Item):
    lng = scrapy.Field()
    lat = scrapy.Field()
    loc = scrapy.Filed()

这是我的蜘蛛文件

for newlist in HtmlXPathSelector(response).select('/html/body'):  
    l = ItemLoader(item=Citylist(),response = response)
    l.add_xpath('lng', '//......text()')
    l.add_xpath('lat', '//......text()')
    l.add_value('loc', {'lng': l.get_output_value('lng'), 
                'lat': l.get_output_value('lat')})

    yield l.load_item()

我目前的输出是.....

   'lng':'68.00000',
   'lat':'45.00000',
   'loc':{'lat':'45.00000','lng':'68.00000}.

1) 我只需要输出.....

'loc':{'lng':'68.00000 ,'lat':'45.00000'}, 

我不需要.....

'lng':'68.00000', 'lat':'45.00000',

作为单独的值。请告知如何执行此操作

谢谢

【问题讨论】:

    标签: python-2.7 scrapy


    【解决方案1】:

    第一件事:这是一个关于如何正确处理scrapy https://stackoverflow.com/a/25096896/2446893中的嵌套数据的好答案 第二件事:如果顺序很重要,您可以使用 OrderedDict https://docs.python.org/2/library/collections.html#collections.OrderedDict

    您也可以使用元组只返回值,而不是键。

    【讨论】:

    • 嗨亚瑟,是的,嵌套项目的顺序很重要。我首先需要 lng,然后是 lat 值,因为这是适用于 mongodb 的顺序
    猜你喜欢
    • 2016-10-08
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2019-02-18
    相关资源
    最近更新 更多