我正在尝试批量下载电影数据库中的电影信息。他们网站上提到的首选方法是将电影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文件。
答案 0 :(得分:1)
您的请求使用网址,而您的实际网址位于movieurl变量中。
要将数据写入csv,我建议使用python csv DictWriter,因为你的数据是dicts(response.json()产生一个dict)。
BONUS:如果要格式化字符串,请使用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())