开发者社区> 问答> 正文

Python-从json提取数据的问题

若要提取Instagram条目上的数据,我需要下载媒体列表,然后分别为每个条目下载数据。我只是在做错什么,因为它只会为我获得1个条目的数据,而不是为获得正确数据而需要更改的每个人的数据。

这是当前的代码:

import urllib.request as o
import json
import csv
from pandas.io.json import json_normalize
import pandas as pd

url = 'https://graph.facebook.com/v3.2/1234567891011/media?fields=media_type,like_count,comments_count,timestamp&limit=500&access_token=xxx'
link1 = 'https://graph.facebook.com/v3.2/'
link2 = '/insights?metric=engagement%2Cimpressions%2Creach%2Csaved&access_token=xxx'
with o.urlopen(url) as jfile :
    data1 = json.load(jfile)
    df = json_normalize(data1["data"])
    linki = []
    for dane3 in df:
        linki = link1 + df['id'] + link2
        dx = []
        with o.urlopen(linki[0]) as file2 :
            data2 = json.load(file2)
            dx = json_normalize(data2["data"],
                              record_path ='values',
                              meta =['id', 'name', 'title'])
            dx['ident'] =dx['id'][0].split("/")[0]
dn7 = dx.pivot(index='ident', columns='name', values='value')
dn7

我要提取的数据是:

ident|engagement|impressions|reach|saved
987654321|65|2142|1943|2

我在使用Python 3的代码中需要改进什么?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 17:22:07 451 0
1 条回答
写回答
取消 提交回答
  • 在df中dane3的的每次迭代中,您根据当前的json响应DataFrame重新分配dx`。这意味着您只保留与最后处理的帖子有关的信息。

    取而代之的是,您可以保留标准化的JSONDataFrame的列表,并在所有帖子处理完毕后concat对其进行赋值。

    通过df ['id']linki [0],在for循环的每次迭代中,您还将使用相同的帖子ID,这意味着您将只获取第一篇帖子的数据。取而代之的是,循环应遍历DataFrame的id列的值,即df ['id']中的post_id的值。

    post_data = []
    with o.urlopen(url) as jfile:
        data1 = json.load(jfile)
        df = json_normalize(data1["data"])
        for post_id in df['id']:
            linki = link1 + post_id + link2
            with o.urlopen(linki) as file2:
                data2 = json.load(file2)
                dx = json_normalize(data2["data"],
                                    record_path ='values',
                                    meta =['id', 'name', 'title'])
                dx['ident'] = dx['id'][0].split("/")[0]
                post_data.append(dx)
    dn7 = pd.concat(post_data).pivot(index='ident', columns='name', values='value')
    

    回答来源:stackoverflow

    2020-03-23 17:22:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载