我正在编写一个程序,以显示来自Twitter的基于位置的趋势主题。 我可以从twitter获得json响应,也可以使用json.loads()将其转换为字典
我无法从字典中提取单个值。
Json的回复是:
[
{
"trends": [
{
"name": "#UnrivalledVerithanamRecords",
"url": "http://twitter.com/search?q=%23UnrivalledVerithanamRecords",
"promoted_content": null,
"query": "%23UnrivalledVerithanamRecords",
"tweet_volume": 383837
},
{
"name": "#justiceformadhav",
"url": "http://twitter.com/search?q=%23justiceformadhav",
"promoted_content": null,
"query": "%23justiceformadhav",
"tweet_volume": null
},
{
"name": "#WaitingFor_T_H_A_L_A_60",
"url": "http://twitter.com/search?q=%23WaitingFor_T_H_A_L_A_60",
"promoted_content": null,
"query": "%23WaitingFor_T_H_A_L_A_60",
"tweet_volume": 403385
},
{
"name": "#Vanitha",
"url": "http://twitter.com/search?q=%23Vanitha",
"promoted_content": null,
"query": "%23Vanitha",
"tweet_volume": null
},
{
"name": "#OpenTheDoorForKavin",
"url": "http://twitter.com/search?q=%23OpenTheDoorForKavin",
"promoted_content": null,
"query": "%23OpenTheDoorForKavin",
"tweet_volume": 22660
},
{
"name": "world test championship",
"url": "http://twitter.com/search?q=%22world+test+championship%22",
"promoted_content": null,
"query": "%22world+test+championship%22",
"tweet_volume": null
},
{
"name": "subscribed",
"url": "http://twitter.com/search?q=subscribed",
"promoted_content": null,
"query": "subscribed",
"tweet_volume": null
},
{
"name": "Navas",
"url": "http://twitter.com/search?q=Navas",
"promoted_content": null,
"query": "Navas",
"tweet_volume": 101256
},
{
"name": "Icardi",
"url": "http://twitter.com/search?q=Icardi",
"promoted_content": null,
"query": "Icardi",
"tweet_volume": 196170
},
{
"name": "\u0917\u0923\u092a\u0924\u093f \u092c\u092a\u094d\u092a\u093e",
"url": "http://twitter.com/search?q=%22%E0%A4%97%E0%A4%A3%E0%A4%AA%E0%A4%A4%E0%A4%BF+%E0%A4%AC%E0%A4%AA%E0%A5%8D%E0%A4%AA%E0%A4%BE%22",
"promoted_content": null,
"query": "%22%E0%A4%97%E0%A4%A3%E0%A4%AA%E0%A4%A4%E0%A4%BF+%E0%A4%AC%E0%A4%AA%E0%A5%8D%E0%A4%AA%E0%A4%BE%22",
"tweet_volume": 51477
},
{
"name": "#EconomyKhatreMeinHai",
"url": "http://twitter.com/search?q=%23EconomyKhatreMeinHai",
"promoted_content": null,
"query": "%23EconomyKhatreMeinHai",
"tweet_volume": 18215
},
{
"name": "#VoteForKavin",
"url": "http://twitter.com/search?q=%23VoteForKavin",
"promoted_content": null,
"query": "%23VoteForKavin",
"tweet_volume": 35500
},
{
"name": "#mohammedshami",
"url": "http://twitter.com/search?q=%23mohammedshami",
"promoted_content": null,
"query": "%23mohammedshami",
"tweet_volume": null
},
{
"name": "#PakTorturesMinorities",
"url": "http://twitter.com/search?q=%23PakTorturesMinorities",
"promoted_content": null,
"query": "%23PakTorturesMinorities",
"tweet_volume": null
},
{
"name": "#NammaBengaluru",
"url": "http://twitter.com/search?q=%23NammaBengaluru",
"promoted_content": null,
"query": "%23NammaBengaluru",
"tweet_volume": null
},
{
"name": "#congaccusesnonmuslims",
"url": "http://twitter.com/search?q=%23congaccusesnonmuslims",
"promoted_content": null,
"query": "%23congaccusesnonmuslims",
"tweet_volume": null
},
{
"name": "#PawanJaiswal",
"url": "http://twitter.com/search?q=%23PawanJaiswal",
"promoted_content": null,
"query": "%23PawanJaiswal",
"tweet_volume": null
},
{
"name": "#MudinjaOpenPandraDoorah",
"url": "http://twitter.com/search?q=%23MudinjaOpenPandraDoorah",
"promoted_content": null,
"query": "%23MudinjaOpenPandraDoorah",
"tweet_volume": 37035
},
{
"name": "#ZomatoExposed",
"url": "http://twitter.com/search?q=%23ZomatoExposed",
"promoted_content": null,
"query": "%23ZomatoExposed",
"tweet_volume": null
},
{
"name": "#KingKohli",
"url": "http://twitter.com/search?q=%23KingKohli",
"promoted_content": null,
"query": "%23KingKohli",
"tweet_volume": null
},
{
"name": "#JohnWick",
"url": "http://twitter.com/search?q=%23JohnWick",
"promoted_content": null,
"query": "%23JohnWick",
"tweet_volume": null
},
{
"name": "#GaneshChaturthi",
"url": "http://twitter.com/search?q=%23GaneshChaturthi",
"promoted_content": null,
"query": "%23GaneshChaturthi",
"tweet_volume": 254529
},
{
"name": "#HappyBirthdayPawanKalyan",
"url": "http://twitter.com/search?q=%23HappyBirthdayPawanKalyan",
"promoted_content": null,
"query": "%23HappyBirthdayPawanKalyan",
"tweet_volume": 4559770
},
{
"name": "#\u0917\u0923\u0947\u0936_\u091a\u0924\u0941\u0930\u094d\u0925\u0940",
"url": "http://twitter.com/search?q=%23%E0%A4%97%E0%A4%A3%E0%A5%87%E0%A4%B6_%E0%A4%9A%E0%A4%A4%E0%A5%81%E0%A4%B0%E0%A5%8D%E0%A4%A5%E0%A5%80",
"promoted_content": null,
"query": "%23%E0%A4%97%E0%A4%A3%E0%A5%87%E0%A4%B6_%E0%A4%9A%E0%A4%A4%E0%A5%81%E0%A4%B0%E0%A5%8D%E0%A4%A5%E0%A5%80",
"tweet_volume": 52427
},
{
"name": "#happybirthdaypowerstar",
"url": "http://twitter.com/search?q=%23happybirthdaypowerstar",
"promoted_content": null,
"query": "%23happybirthdaypowerstar",
"tweet_volume": 202196
},
{
"name": "#MondayMotivation",
"url": "http://twitter.com/search?q=%23MondayMotivation",
"promoted_content": null,
"query": "%23MondayMotivation",
"tweet_volume": 122241
},
{
"name": "#AbhinandanVarthaman",
"url": "http://twitter.com/search?q=%23AbhinandanVarthaman",
"promoted_content": null,
"query": "%23AbhinandanVarthaman",
"tweet_volume": 17277
},
{
"name": "#RomilaThapar",
"url": "http://twitter.com/search?q=%23RomilaThapar",
"promoted_content": null,
"query": "%23RomilaThapar",
"tweet_volume": null
},
{
"name": "#VinayagarChaturthi",
"url": "http://twitter.com/search?q=%23VinayagarChaturthi",
"promoted_content": null,
"query": "%23VinayagarChaturthi",
"tweet_volume": 19151
},
{
"name": "#kulbhushanjadhav",
"url": "http://twitter.com/search?q=%23kulbhushanjadhav",
"promoted_content": null,
"query": "%23kulbhushanjadhav",
"tweet_volume": null
},
{
"name": "#BoycottRedLabel",
"url": "http://twitter.com/search?q=%23BoycottRedLabel",
"promoted_content": null,
"query": "%23BoycottRedLabel",
"tweet_volume": null
},
{
"name": "#mondaythoughts",
"url": "http://twitter.com/search?q=%23mondaythoughts",
"promoted_content": null,
"query": "%23mondaythoughts",
"tweet_volume": 41792
},
{
"name": "#\u0bb5\u0bbf\u0ba8\u0bbe\u0baf\u0b95\u0bb0\u0bcd\u0b9a\u0ba4\u0bc1\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bbf",
"url": "http://twitter.com/search?q=%23%E0%AE%B5%E0%AE%BF%E0%AE%A8%E0%AE%BE%E0%AE%AF%E0%AE%95%E0%AE%B0%E0%AF%8D%E0%AE%9A%E0%AE%A4%E0%AF%81%E0%AE%B0%E0%AF%8D%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF",
"promoted_content": null,
"query": "%23%E0%AE%B5%E0%AE%BF%E0%AE%A8%E0%AE%BE%E0%AE%AF%E0%AE%95%E0%AE%B0%E0%AF%8D%E0%AE%9A%E0%AE%A4%E0%AF%81%E0%AE%B0%E0%AF%8D%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF",
"tweet_volume": null
},
{
"name": "#HappyBirthdayKichchaSudeep",
"url": "http://twitter.com/search?q=%23HappyBirthdayKichchaSudeep",
"promoted_content": null,
"query": "%23HappyBirthdayKichchaSudeep",
"tweet_volume": 27395
},
{
"name": "#herofirstlook",
"url": "http://twitter.com/search?q=%23herofirstlook",
"promoted_content": null,
"query": "%23herofirstlook",
"tweet_volume": 60975
},
{
"name": "#28DaysOfKashmirShutdown",
"url": "http://twitter.com/search?q=%2328DaysOfKashmirShutdown",
"promoted_content": null,
"query": "%2328DaysOfKashmirShutdown",
"tweet_volume": 41193
},
{
"name": "#matkaroforward",
"url": "http://twitter.com/search?q=%23matkaroforward",
"promoted_content": null,
"query": "%23matkaroforward",
"tweet_volume": null
},
{
"name": "#Mirzapur",
"url": "http://twitter.com/search?q=%23Mirzapur",
"promoted_content": null,
"query": "%23Mirzapur",
"tweet_volume": 11950
},
{
"name": "#Chandrayaan2",
"url": "http://twitter.com/search?q=%23Chandrayaan2",
"promoted_content": null,
"query": "%23Chandrayaan2",
"tweet_volume": 25911
},
{
"name": "#ARSTOT",
"url": "http://twitter.com/search?q=%23ARSTOT",
"promoted_content": null,
"query": "%23ARSTOT",
"tweet_volume": 19960
},
{
"name": "#mahapackageforpuri",
"url": "http://twitter.com/search?q=%23mahapackageforpuri",
"promoted_content": null,
"query": "%23mahapackageforpuri",
"tweet_volume": null
},
{
"name": "#GodMorningMonday",
"url": "http://twitter.com/search?q=%23GodMorningMonday",
"promoted_content": null,
"query": "%23GodMorningMonday",
"tweet_volume": 64217
},
{
"name": "#INXMediaCase",
"url": "http://twitter.com/search?q=%23INXMediaCase",
"promoted_content": null,
"query": "%23INXMediaCase",
"tweet_volume": null
},
{
"name": "#ENPTWeekBegins",
"url": "http://twitter.com/search?q=%23ENPTWeekBegins",
"promoted_content": null,
"query": "%23ENPTWeekBegins",
"tweet_volume": 53345
},
{
"name": "#ak60\u0ca4\u0cb2\u0cbe60\u0985\u099c\u09bf\u09a460\u0d85\u0da2\u0dd2\u0dad\u0dca60",
"url": "http://twitter.com/search?q=%23ak60%E0%B2%A4%E0%B2%B2%E0%B2%BE60%E0%A6%85%E0%A6%9C%E0%A6%BF%E0%A6%A460%E0%B6%85%E0%B6%A2%E0%B7%92%E0%B6%AD%E0%B7%8A60",
"promoted_content": null,
"query": "%23ak60%E0%B2%A4%E0%B2%B2%E0%B2%BE60%E0%A6%85%E0%A6%9C%E0%A6%BF%E0%A6%A460%E0%B6%85%E0%B6%A2%E0%B7%92%E0%B6%AD%E0%B7%8A60",
"tweet_volume": 25604
},
{
"name": "#\u0917\u0923\u092a\u0924\u093f_\u092c\u092a\u094d\u092a\u093e_\u092e\u094b\u0930\u092f\u093e",
"url": "http://twitter.com/search?q=%23%E0%A4%97%E0%A4%A3%E0%A4%AA%E0%A4%A4%E0%A4%BF_%E0%A4%AC%E0%A4%AA%E0%A5%8D%E0%A4%AA%E0%A4%BE_%E0%A4%AE%E0%A5%8B%E0%A4%B0%E0%A4%AF%E0%A4%BE",
"promoted_content": null,
"query": "%23%E0%A4%97%E0%A4%A3%E0%A4%AA%E0%A4%A4%E0%A4%BF_%E0%A4%AC%E0%A4%AA%E0%A5%8D%E0%A4%AA%E0%A4%BE_%E0%A4%AE%E0%A5%8B%E0%A4%B0%E0%A4%AF%E0%A4%BE",
"tweet_volume": null
},
{
"name": "#vikramlander",
"url": "http://twitter.com/search?q=%23vikramlander",
"promoted_content": null,
"query": "%23vikramlander",
"tweet_volume": null
},
{
"name": "#ManmohanSingh",
"url": "http://twitter.com/search?q=%23ManmohanSingh",
"promoted_content": null,
"query": "%23ManmohanSingh",
"tweet_volume": null
},
{
"name": "#drsinghoneconomiccrisis",
"url": "http://twitter.com/search?q=%23drsinghoneconomiccrisis",
"promoted_content": null,
"query": "%23drsinghoneconomiccrisis",
"tweet_volume": null
},
{
"name": "#happybirthdayjungkook",
"url": "http://twitter.com/search?q=%23happybirthdayjungkook",
"promoted_content": null,
"query": "%23happybirthdayjungkook",
"tweet_volume": 119143
}
],
"as_of": "2019-09-02T22:02:12Z",
"created_at": "2019-09-02T21:57:15Z",
"locations": [
{
"name": "Ahmedabad",
"woeid": 2295402
}
]
}
]
我的代码是
CONSUMER_KEY = 'xxx'
CONSUMER_SECRET = 'xxx'
ACCESS_KEY = 'xxx-xxx'
ACCESS_SECRET = 'xxx'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
tweepyapi = tweepy.API(auth)
print(json.dumps(tweepyapi.trends_place(2295402)))
my_dict = json.loads(json.dumps(tweepyapi.trends_place(2295402), indent=2))
print(my_dict['trends']['name'])
我收到以下错误:
TypeError: list indices must be integers or slices, not str
如何从响应中仅提取“名称”?
答案 0 :(得分:1)
问题在于您有一个对象列表(注意JSON如何以方括号开头),因此您必须访问适当的索引才能获取信息。示例:
print(my_dict[0]["trends"][0]["name"])
这应该从第一个条目中获得“趋势”,然后从中获得第一个趋势的名称。
答案 1 :(得分:0)
pandas
,因为它使访问数据更加容易。my_dict
加载到pandas.DataFrame
中,所有信息将更易于访问并从中提取商业智能。my_dict[0]["trends"][0]["name"]
不需要这种索引来查找简单的信息DataFrame
:import pandas as pd
from pandas.io.json import json_normalize
df = df = json_normalize(my_dict, record_path='trends')
df
的输出: name url promoted_content query tweet_volume
#UnrivalledVerithanamRecords http://twitter.com/search?q=%23UnrivalledVerithanamRecords NaN %23UnrivalledVerithanamRecords 383837.0
#justiceformadhav http://twitter.com/search?q=%23justiceformadhav NaN %23justiceformadhav NaN
#WaitingFor_T_H_A_L_A_60 http://twitter.com/search?q=%23WaitingFor_T_H_A_L_A_60 NaN %23WaitingFor_T_H_A_L_A_60 403385.0
#Vanitha http://twitter.com/search?q=%23Vanitha NaN %23Vanitha NaN
#OpenTheDoorForKavin http://twitter.com/search?q=%23OpenTheDoorForKavin NaN %23OpenTheDoorForKavin 22660.0
name
:df.name.head() # return top 5 names for example
0 #UnrivalledVerithanamRecords
1 #justiceformadhav
2 #WaitingFor_T_H_A_L_A_60
3 #Vanitha
4 #OpenTheDoorForKavin
Name: name, dtype: object
tweet_volume
>一些数字:df[df.tweet_volume > 300_000]
name url promoted_content query tweet_volume
#UnrivalledVerithanamRecords http://twitter.com/search?q=%23UnrivalledVerithanamRecords NaN %23UnrivalledVerithanamRecords 383837.0
#WaitingFor_T_H_A_L_A_60 http://twitter.com/search?q=%23WaitingFor_T_H_A_L_A_60 NaN %23WaitingFor_T_H_A_L_A_60 403385.0
#HappyBirthdayPawanKalyan http://twitter.com/search?q=%23HappyBirthdayPawanKalyan NaN %23HappyBirthdayPawanKalyan 4559770.0