首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -创建一个循环来更改api搜索结果并写入JSON/CSV

Python -创建一个循环来更改api搜索结果并写入JSON/CSV
EN

Stack Overflow用户
提问于 2018-09-02 16:33:05
回答 1查看 62关注 0票数 0

我完全不知道该如何处理我的问题。到目前为止,我可以用我的“target_id”中的一个请求写入一个JSON文件。API将自动输出JSON。

问题是,如果我有一个目标_id的列表(目前在JSON和CSV中),我如何循环它来改变目标_id(也就是更改API URL),然后写入同一个文件?

代码:

代码语言:javascript
复制
import urllib.parse
import requests
import json

main_api = 'http://sc-api.com/?api_source=live&system=accounts&action=full_profile&'

target_id = 'abc'

url = main_api + urllib.parse.urlencode({'target_id': target_id})
json_data = requests.get(url).json()
json_status = json_data['request_stats']['query_status']

#-----did the API work?-----
#print('API Status: ' + json_status)
#print()
#print(json_data)
#print()

handle = json_data['data']['handle']
moniker = json_data['data']['moniker']
citizen_number = json_data['data']['citizen_number']

#-----preview if no need to write to file-----
#print('target_id: ' + handle + ',', 'Moniker: ' + moniker + ',', 'Citizen Number: ' + citizen_number)

with open('new_test.json', 'w') as f:
    json.dump((handle, moniker, citizen_number), f)

下面是包含目标ID列表的文件的格式:

代码语言:javascript
复制
 [
      {
        "Handle": "name1"
      },
      {
        "Handle": "name2"
      },
      {
        "Handle": "name3"
      },
      {
        "Handle": "name4"
      },
      {
        "Handle": "name5"
      }
    ]

对此或向何处提供任何帮助,我们将不胜感激。谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-02 17:11:57

您可以在文件上循环如下所示:

代码语言:javascript
复制
import urllib.parse
import requests
import json

main_api = 'http://sc-api.com/?api_source=live&system=accounts&action=full_profile&'

with open('data.json') as f:
    data = json.load(f)

    result = []
    for element in data:
        target_id = element['Handle']

        url = main_api + urllib.parse.urlencode({'target_id': target_id})
        json_data = requests.get(url).json()
        json_status = json_data['request_stats']['query_status']

        handle = json_data['data']['handle']
        moniker = json_data['data']['moniker']
        citizen_number = json_data['data']['citizen_number']

        # -----preview if no need to write to file-----
        print('target_id: ' + handle + ',', 'Moniker: ' + moniker + ',', 'Citizen Number: ' + citizen_number)

        result.append({'target_id': handle, 'Moniker': moniker, 'Citizen Number': citizen_number})

    with open('output.json', 'w') as f:
        json.dump(result, f)

输出

代码语言:javascript
复制
target_id: abc, Moniker: C4sher, Citizen Number: 210602
target_id: abc, Moniker: C4sher, Citizen Number: 210602
target_id: abc, Moniker: C4sher, Citizen Number: 210602
target_id: abc, Moniker: C4sher, Citizen Number: 210602
target_id: abc, Moniker: C4sher, Citizen Number: 210602

除了上面的输出之外,这个脚本还创建了一个具有以下格式的'output.json'

代码语言:javascript
复制
[{"Moniker": "C4sher", "target_id": "abc", "Citizen Number": "210602"}, 
  {"Moniker": "C4sher", "target_id": "abc", "Citizen Number": "210602"}, 
  {"Moniker": "C4sher", "target_id": "abc", "Citizen Number": "210602"}, 
  {"Moniker": "C4sher", "target_id": "abc", "Citizen Number": "210602"}, 
  {"Moniker": "C4sher", "target_id": "abc", "Citizen Number": "210602"}]

一些注释:

脚本假定.py文件和'data.json'文件位于同一个目录中。另外,输入文件名为'data.json'。我用“工作示例”来更改问题的示例JSON,如下所示:

代码语言:javascript
复制
[
  {
    "Handle": "abc"
  },
  {
    "Handle": "abc"
  },
  {
    "Handle": "abc"
  },
  {
    "Handle": "abc"
  },
  {
    "Handle": "abc"
  }
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52138964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档