2017-03-15 42 views
-1

我正在尝试批量下载电影数据库中的电影信息。在他们的网站上提到的首选方法是循环播放电影ID从1到最近的电影ID。当我用他们的ID拉动个别电影时,我得到了整套信息。但是,当我将它拉入循环中时,我收到错误34,找不到资源。对于我的例子,我选择了一个特殊的电影ID,我抓住了个人(Skyfall,37724),它返回资源无法找到的错误。通过API循环浏览API

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

您请求从'url',而不是'movieurl'您的数据 - 那会是你的问题? – Pit

+0

就是这样!哇!你对第二个问题有什么想法吗? – macworthy

回答

1
  1. 您的请求使用url,而您的实际url位于movieurl变量中。要将你的数据写入csv,我会推荐python csv DictWriter,因为你的数据是dicts(response.json()产生一个dict)。

  2. 奖金:如果您想格式化字符串,使用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()) 
+0

谢谢!然而,这将返回以下错误:'类型错误回溯(最近最后一次调用) () 5开放( 'output.csv', 'W')作为csvfile : ----> 6 writer = csv.DictWriter(csvfile) 7我为范围内(37724,37726): 8 url ='https://api.themoviedb.org/3/movie/{id} ?api_key = a792ae6c41aa660a503fb1c835a3daa7&language = en-US'.format(id = i) TypeError:__init __()缺少1个必需的位置参数:'fieldnames'' – macworthy

相关问题