2017-02-24 13 views
0

私はスマートミラー用のスクレーパーを構築しようとしています。私は天気、汚染レベル&のニュースを得るためにpythonスクリプトをビルドしました。なぜなら、天気&の汚染レベルのような他の機能の代わりにデータを掻き集めるときに、このブロックの機能でエラーが発生しているからです。これは、私はエラーを取得していますコードです:KeyError: 'ある機能にはデータがありますが、他の機能にはありません。

def news(self): 
     reddit1 = "https://www.reddit.com/r/LifeProTips/hot.json" 
     reddit2 = "https://reddit.com/r/technology/hot.json" 
     reddit3 = "https://reddit.com/r/Futurology/hot.json" 
     reddit4 = "https://reddit.com/r/Showerthoughts/hot.json" 
     lpt = requests.get(reddit1) 
     tech = requests.get(reddit2) 
     futu = requests.get(reddit3) 
     show = requests.get(reddit4) 
     lptd = json.loads(lpt.text) 
     techd = json.loads(tech.text) 
     futud = json.loads(futu.text) 
     showd = json.loads(show.text) 
     lpttitle = lptd['data']['children'][0]['data']['title'] 
     print(lpttitle) 
     lptcontent = lptd['data']['children'][0]['data']['selftext'] 
     print(lptcontent) 
     techttitle = techd['data']['children'][0]['data']['title'] 
     print(techtitle) 
     techcontent = techd['data']['children'][0]['data']['selftext'] 
     print(techcontent) 
     fututitle = futud['data']['children'][2]['data']['title'] 
     print(fututitle) 
     futucontent = futud['data']['children'][0]['data']['selftext'] 
     print(futucontent) 
     showtitle = showd['data']['children'][0]['data']['title'] 
     print(showdata) 
     showcontent = showd['data']['children'][0]['data']['selftext'] 
     print(showcontent) 
     lptdump = requests.put('firebaseurl',json={"Title": lpttitle, "Content": lptcontent}) 
     techdump = requests.put('firebaseurl',json={"Title": techtitle, "Content": techcontent}) 
     futudump = requests.put('firebaseurl',json={"Title": fututitle, "Content": futucontent}) 
     showdump = requests.put('firebaseurl',json={"Title": showtitle, "Content": showcontent}) 

が、このような機能のために:

def pollution(self): 
    url = "api" 
    url2 = "api" 
    pm10 = requests.get(url) 
    pm25 = requests.get(url2) 
    pm10leveldata = json.loads(pm10.text) 
    pm25leveldata = json.loads(pm25.text) 
    pm10level = pm10leveldata[0]['data'] 
    pm25level = pm25leveldata[0]['data'] 
    print pm10level 
    print pm25level 
    # pm10 = round(pm10level) 
    # pm25 = round(pm25level) 
    pdump = requests.put('firebaseurl',json={"Pm10": pm10level, "Pm25": pm25level}) 

エラーなし。

{'error': 429, 'message': 'Too Many Requests'} 

あなたが怒っているのredditを:あなたはそれを使用しようとする前に、なぜ私はその1ではなく、この

+0

は、エラーが発生していますか? –

+0

@ColinBasnett lpttitle = lptd ['data'] ['children'] [0] ['data'] ['title'] 'コメントを外すと他の人に行く – MatejMecka

+1

' lptdを出力する'行が実行され、キーが実際に存在するかどうかを確認します。あなたは真ではないデータのフォーマットについて仮定しているでしょう。 –

答えて

3

印刷アウトlptdような関数でキーエラーを取得しています。これはどのリクエストでも発生する可能性があるため、エラーが飛び交っているように見える可能性があります。

余談として

、あなたが直接リクエストからJSONを取得することができます:どのようなラインで

lptd = requests.get(reddit1).json() 
+0

ありがとうございます。それは問題の1つで、それを怒らせないために時間をかけてください。 Plus idkとはどのようにしてlptdを印刷するか他の人はクラッシュしないようにする – MatejMecka

+0

私はどちらも知らない...あなたのスクリプトを走らせた最初の数回は私のために働いて失敗し始めた。たぶん、かなりの時間を追跡し、テストラン間で差をつけることが遅れているかもしれません。 – tdelaney

関連する問題