【问题标题】:How to set key value pair of json output in scrapy?如何在scrapy中设置json输出的键值对?
【发布时间】:2014-08-24 05:30:54
【问题描述】:
[{"Definition": ["Hello World."], "Fast": ["10"], "Free": ["Yes"], "Name": ["Hello"], "Movement": ["Fine"]}]

使用此命令爬取网站后:

scrapy crawl hello -o helloworld.json -t json   

我得到了上述格式的输出。我希望名称的值作为 json 数组的名称出现,所以输出看起来像这样

{"Hello": {"Definition": ["Hello World"],"Fast": ["10"],"Free": ["Yes"], "Movement": ["Fine"]}

在scrapy中可以做到这一点吗?

【问题讨论】:

    标签: python json web-scraping scrapy


    【解决方案1】:

    你可以这样做:

    >>> a = [{"Definition": ["Hello World."], "Fast": ["10"], "Free": ["Yes"], "Name": ["Hello"], "Movement": ["Fine"]}]
    >>> b = {a[0]['Name'][0]:a[0].copy()} # copy optional
    del b[a[0]['Name'][0]]['Name']
    >>> b
    {'Hello': {'Definition': ['Hello World.'], 'Fast': ['10'], 'Free': ['Yes'], 'Movement': ['Fine']}}
    

    根据您的评论进行编辑:

    >>> a = [{"Definition": ["Hello World."], "Fast": ["10"], "Free": ["Yes"], "Name": ["Hello"], "Movement": ["Fine"]}]
    >>> b = {a[0]['Name'][0]:{k:v[0] for k,v in a[0].items()}}
    >>> del b[a[0]['Name'][0]]['Name']
    >>> b
    {'Hello': {'Definition': 'Hello World.', 'Fast': '10', 'Free': 'Yes', 'Movement': 'Fine'}}
    

    【讨论】:

    • 谢谢。如果我想在我的蜘蛛类中这样做,这样我就不必为单个 json 文件编写代码了。
    • @Rahul 你能为这段代码编写一个函数并将其合并到你的类中吗?
    • 看到事情是在运行爬虫后,我得到了 json 格式的输出。我不明白如何在没有输出的情况下做到这一点。
    • 我相信我明白了。所以你想要一个 python 程序,你可以通过管道输出给你想要的输出?还是您将原始输出存储在文件中?
    • 好吧,我将原始输出存储到一个 json 文件中,但我希望它采用我提供的格式。第一个输出是原始输出。我想对其进行操作,以便获得所需的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2015-09-06
    • 2013-04-01
    相关资源
    最近更新 更多