通过API循环使用API

时间:2017-03-15 15:04:19

标签: python api

我正在尝试批量下载电影数据库中的电影信息。他们网站上提到的首选方法是将电影ID从1循环到最近的电影ID。当我使用他们的ID提取个人电影时,我会获得整套信息。但是,当我将其拉入循环时,我收到错误34,无法找到资源。对于我的例子,我特意挑选了一个我抓过的电影ID(Skyfall,37724),它返回了无法找到资源的错误。

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文件。

1 个答案:

答案 0 :(得分:1)

  1. 您的请求使用网址,而您的实际网址位于movieurl变量中。

  2. 要将数据写入csv,我建议使用python csv DictWriter,因为你的数据是dicts(response.json()产生一个dict)。

  3. BONUS:如果要格式化字符串,请使用string.format方法:

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

    这更加强大。

  4. 代码的工作,改进版本,写入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())