2017-03-01 6 views
0

私はウェブサイトからデータをスクレイピングするために以下のコードを使用しています。私は直面しているkey error: 0JSONデータのスクレイピングのためにPythonのヘルプが必要

私のコードの問題を親切に教えてください。 Webページから

オリジナルJSONレスポンス: https://www.demo.com/api/user_details/22

応答:

{"user_details":{"user_id":"22","username":"Test","user_email":"[email protected]"}} 

私はしたいがusernameuser_iduser_emailこすり。

import json 
import requests 
import datetime 

#data outputs to a CSV file in the current directory 
csv_output = open("test.csv", "w") 

end_page = 5; 

#scan through pages 1 to end_page for data, 20 results per page 
for page in range(1,end_page+1): 
    r = requests.get('https://www.demo.com/api/user_details/' + str(page)) 
    data = r.json() 
    for index in range(len(data["user_details"])): 

     csv_output.write("\"%s\",%s\n" % (data["user_details"][index]["user_id"].encode('ascii', 'ignore'))), 

     data["user_details"][index]["user_id"] 

csv_output.close() 

答えて

1

data["user_details"]はdictのとないリストであり、あなたは、インデックスを使用して値にアクセスしようとしているので、あなたがエラーを取得しています:

data["user_details"][index] .... 

あなたは、私が試してみました何

dictからの特定のキーにアクセスすることによってエントリを得ることができる。

user_id = data["user_details"]['user_id'] 
username = data["user_details"]['username'] 
user_email = data["user_details"]['user_email'] 
+0

インデックスを削除しても問題ありませんか? –

0
{"user_details":{"user_id":"22","username":"Test","user_email":"[email protected]"}} 

ユーザーの詳細はこちらの辞書です。一方、indexrangeコールからの整数です。最初の値は0です。あなたのコードはdata["user_details"][0]を読み込もうとします。しかしその辞書には鍵0はありません。

辞書を反復処理するには、(key, value)ペアのタプルを与えるitemsメソッドを呼び出すことができます。 asnwered AKSまさに

d = {"user_id":"22","username":"Test","user_email":"[email protected]"} 
for k,v in d.items(): 
    print("Key: {}, Value: {}".format(k,v)) 
+0

私のコードは要求をループしていません。 'd'変数にデータを表示しているだけです。 –

0

が、私は本当にあなたがa framework called Scrapy tocreateクローラを使用することをお勧めします。ずっと簡単。 :)

+0

今私はそれをこれまで以上に使用しています。行く道。 :) – porthunt

関連する問題