【问题标题】:Python - Problem with extract data from jsonPython - 从json中提取数据的问题
【发布时间】:2020-03-16 12:31:51
【问题描述】:

要提取 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 的代码中需要改进哪些方面?

【问题讨论】:

    标签: python json python-3.x instagram-api


    【解决方案1】:

    for dane3 in df 的每次迭代中,您都会根据当前的json 响应DataFrame 重新分配dx。这意味着您只保留与最后处理的帖子相关的信息。

    相反,您可以在处理完所有帖子后保留标准化 JSON DataFrames 和 concatenate 的列表。

    您还通过df['id']linki[0]for 循环的每次迭代中使用相同的帖子ID,这意味着您只会获得第一个帖子的数据。相反,您的循环应该遍历DataFrame'id' 列的值,即for post_id in df['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')
    

    【讨论】:

    • 非常感谢您提供的信息,但可能不完全是因为在循环中始终关闭相同的结果
    • 抱歉,我不确定您的意思?你测试过这个解决方案吗?不幸的是我不能,因为我没有访问令牌。
    • 所以我测试了这个解决方案,并且行为与我的相似,只有 5 次显示相同。
    猜你喜欢
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2023-04-07
    • 2020-06-28
    • 1970-01-01
    • 2021-11-24
    • 2017-04-16
    相关资源
    最近更新 更多