我使用Parsehub API以json格式抓取以下数据,当我想在某个国家/地区打印信息时,我只能获取第一组数据:'name','pop','area ','growth','worldPer'和'rank',但我无法获得“ image”。
[当我打印整个json文件时,数据就在这里,但是当我尝试使用图像值打印国家/地区数据时,出现键错误。
是否可以通过匹配国家/地区名称来合并两个对象?
main.py
class Data:
def __init__(self, api_key, project_token):
self.api_key = api_key
self.project_token = project_token
self.params = {"api_key":api_key}
self.data = self.get_data()
def get_data(self):
r = requests.get(f'https://www.parsehub.com/api/v2/projects/xxxx/last_ready_run/data', params={"api_key": DATA_API_KEY})
data = json.loads(r.text)
print(r.text)
return data
def data_by_name(self,country):
data = self.data['country']
for content in data:
if content['name'].lower() == country.lower():
print(content)
name = content['name']
pop = content['pop']
popRank = content['rank']
growth = content['growth']
per = content['worldPer']
area = content['area']
image = content['image'] #<----- KeyError: 'image'
return(name,pop,popRank,growth,per,area)
data = Data(DATA_API_KEY,DATA_PROJECT_TOKEN)
data.data_by_name('china')
country.json
{
"country": [
{
"name": "China",
"pop": "1,438,862,614",
"area": "9,706,961 km²",
"growth": "0.39%",
"worldPer": "18.47%",
"rank": "1"
},
{
"name": "China",
"image": "https://s3.amazonaws.com/images.wpr.com/flag-pages/png250/cn.png"
}
]
}
熊猫可以为您解决这个问题
import pandas as pd
d = {
"country": [
{
"name": "China",
"pop": "1,438,862,614",
"area": "9,706,961 km²",
"growth": "0.39%",
"worldPer": "18.47%",
"rank": "1"
},
{
"name": "China",
"image": "https://s3.amazonaws.com/images.wpr.com/flag-pages/png250/cn.png"
}
]
}
df = pd.DataFrame.from_dict(d['country']).groupby('name').first()
输出
pop area growth worldPer rank image
name
China 1,438,862,614 9,706,961 km² 0.39% 18.47% 1 https://s3.amazonaws.com/images.wpr.com/flag-p...