python - 在for循环python中更改API调用
问题描述
我试图在 for 循环中调用几个 api 数据集以更改调用,然后将这些数据集一起附加到更大的数据框中。
我已经编写了这段代码,它可以调用第一个数据集,然后为下一次调用返回此错误。
`url = base + "max=" + maxrec + "&" "type=" + item + "&" + "freq=" + freq + "&" + "px=" +px + "&" + "ps=" + str(ps) + "&" + "r="+ r + "&" + "p=" + p + "&" + "rg=" +rg + "&" + "cc=" + cc + "&" + "fmt=" + fmt
TypeError: must be str, not Response`
这是我当前的代码
import requests
import pandas as pd
base = "http://comtrade.un.org/api/get?"
maxrec = "50000"
item = "C"
freq = "A"
px="H0"
ps="all"
r="all"
p="0"
rg="2"
cc="AG2"
fmt="json"
comtrade = pd.DataFrame(columns=[])
for year in range(1991,2018):
ps="{}".format(year)
url = base + "max=" + maxrec + "&" "type=" + item + "&" + "freq=" + freq + "&" + "px=" +px + "&" + "ps=" + str(ps) + "&" + "r="+ r + "&" + "p=" + p + "&" + "rg=" +rg + "&" + "cc=" + cc + "&" + "fmt=" + fmt
r = requests.get(url)
x = r.json()
new = pd.DataFrame(x["dataset"])
comtrade = comtrade.append(new)
解决方案
让我们requests
为您组装 URL。
common_params = {
"max": maxrec,
"type": item,
"freq": freq,
# etc
}
for year in range(1991,2018):
response = requests.get(base, params=dict(common_params, ps=str(year))
response_data = response.json()
new = pd.DataFrame(response_data["dataset"])
comtrade = comtrade.append(new)
推荐阅读
- vba - 需要 VBA 代码将形状(例如:向下箭头/向上箭头)放置在 power point 幻灯片中表格的特定单元格(基于单元格值)的顶部
- google-sheets - Google 表格的 QUERY 多张表格并返回唯一值
- swift - 删除子图层中的动画
- javascript - 如何使用 node.js 将 _bsontype objectID 值转换为 string/objectID 以插入 mongoDB
- android - 未使用 DiffUtil 调用 getItemCount 或 onBindViewHolder
- c# - 从 Visual Studio 启动 ASP.NET Core 不是从构建文件夹开始
- java - 如何根据活动配置文件访问 application-{profile}.properties 文件
- amazon-web-services - AWS AppSync DDoS protection. What are the alternatives?
- swift - UICollectionViewFlowLayout 中的 UICollectionViewCell 重复行
- python - 如何在 Django 上重命名上传的文件,然后再将其发送到亚马逊 s3 存储桶?