Python - 从 json 中提取数据时出现问题
Python - Problem with extract data from 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?
在 for dane3 in df
的每次迭代中,您将根据当前 json 响应 DataFrame
重新分配 dx
。这意味着您只保留与最后处理的 post 相关的信息。
相反,您可以保留规范化 JSON DataFrame
的列表,并在处理完所有 post 后 concat
enate 它们。
您还在 for
循环的每次迭代中使用相同的 post ID,通过 df['id']
和 linki[0]
,这意味着您只会获得第一个 post 的数据。相反,您的循环应该遍历 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')
要提取 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?
在 for dane3 in df
的每次迭代中,您将根据当前 json 响应 DataFrame
重新分配 dx
。这意味着您只保留与最后处理的 post 相关的信息。
相反,您可以保留规范化 JSON DataFrame
的列表,并在处理完所有 post 后 concat
enate 它们。
您还在 for
循环的每次迭代中使用相同的 post ID,通过 df['id']
和 linki[0]
,这意味着您只会获得第一个 post 的数据。相反,您的循环应该遍历 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')