2017-03-15 14 views
-1

ムービーデータベースからムービー情報を一括ダウンロードしようとしています。彼らのウェブサイトで言及された好ましい方法は、映画IDを1から最新の映画IDまでループすることである。自分のIDを使って個々のムービーをプルすると、すべての情報が得られます。しかし、私はそれをループにプルすると、エラー34が表示され、リソースが見つかりません。私の例では、個人的に取得した映画ID(Skyfall、37724)を具体的に選んだが、これはリソースがエラーになることはない。ID付きループ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ファイルを作成することです。

+1

あなたはurl'代わりmovieurl' 'の'からデータを要求している - それはあなたの問題である可能性があり? – Pit

+0

それだけです!うわー!あなたは私の2番目の質問に対する考えを持っていますか? – macworthy

答えて

1
  1. あなたのリクエストはurlを使用し、実際のurlはmovieurl変数にあります。

  2. データをcsvに書き込むには、あなたのデータがdicts(response.json()がdictを生成する)であるため、python csv DictWriterをお勧めします。

  3. 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()) 
+0

ありがとう!しかし、これは次のエラーを返します: 'TypeError Traceback(直前の最後の呼び出し) ( ) 5でオープン( 'output.csv'、 'w')としてcsvfile : ----> 6 writer = csv.DictWriter(csvfile) 範囲(37724,37726)内の7の場合: 8 url = 'https://api.themoviedb.org/3/movie/{id} ?api_key = a792ae6c41aa660a503fb1c835a3daa7&language = en-US'.format(id = i) TypeError:__init __()ありません1必要な位置引数: 'fieldnames' – macworthy

関連する問題