若要提取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
在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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。