Python 使用API通过ID进行循环

Python 使用API通过ID进行循环,python,api,Python,Api,我正在尝试从电影数据库批量下载电影信息。他们网站上提到的首选方法是从1到最新的电影ID循环浏览电影ID。当我使用他们的ID提取单个电影时,我会获得整个信息集。然而,当我把它拉入一个循环时,我收到一个错误34,资源找不到。在我的例子中,我专门挑选了一个我抓取的电影ID(Skyfall,37724),该ID返回“资源找不到”错误 import requests dataset = [] for i in range(37724, 37725): url = 'https://api.th

我正在尝试从电影数据库批量下载电影信息。他们网站上提到的首选方法是从1到最新的电影ID循环浏览电影ID。当我使用他们的ID提取单个电影时,我会获得整个信息集。然而,当我把它拉入一个循环时,我收到一个错误34,资源找不到。在我的例子中,我专门挑选了一个我抓取的电影ID(Skyfall,37724),该ID返回“资源找不到”错误

import requests

dataset = []

for i in range(37724, 37725):
    url = 'https://api.themoviedb.org/3/movie/x?api_key=*****&language=en-US'
    movieurl = url[:35] + str(i) + url[36:]
    payload = "{}"
    response = requests.request("GET", url, data=payload)
    data = response.json()
    dataset.append(data)
    print(movieurl)     

dataset
【答:】1)是否存在环路无法提取信息的原因?这是编程问题还是API特有的问题

2) 我的代码的设置方式是否能够最好地提取信息并将其批量存储?我的最终目标是创建一个包含数据的CSV文件

  • 您的请求使用url,而实际url位于movieurl变量中

  • 要将数据写入csv,我建议使用python csv DictWriter,因为您的数据是dicts(response.json()生成dict)

  • 奖励:如果要格式化字符串,请使用string.format方法:

    url = 'https://api.themoviedb.org/3/movie/{id}?api_key=*****&language=en-US'.format(id=i)
    
    这是更强大的

  • 编写到csv的代码的有效改进版本将是:

    import csv
    
    import requests
    
    with open('output.csv', 'w') as csvfile:
        writer = csv.DictWriter(csvfile)
        for i in range(37724, 37725):
            url = 'https://api.themoviedb.org/3/movie/{id}?api_key=*****&language=en-US'.format(id=i)
            payload = "{}"
            response = requests.request("GET", url, data=payload)
            writer.writerow(response.json())
    

    您是从
    url
    而不是
    movieurl
    请求数据——这可能是您的问题吗?就是这样!哇!你对我的第二个问题有什么想法吗?谢谢!但是,这将返回以下错误:
    TypeError Traceback(最近一次调用last)in()4 5,open('output.csv','w')作为csvfile:--->6 writer=csv.DictWriter(csvfile)7,用于范围(37724,37726)内的i:8 url=https://api.themoviedb.org/3/movie/{id}?api_key=a792ae6c41aa660a503fb1c835a3daa7&language=en US'。格式(id=i)类型错误:uuuu init_uuuuuu()缺少1个必需的位置参数:“字段名”