2017-03-13 10 views
-2

こんにちは私は、ループと.jsonで検索するときにいくつかのことを理解するのに困っています。私はウェブサイトから.jsonを取得し、['body'] 'から25個のアイテムを取り出し、新しい[' body ']'で新しい.jsonページで再起動してそれらを取得したいと思います。最後に、すべてのデータを.txtファイルに送信します。 は、ここで私は、コードは私の最初のページに.jsonから25 [「体」]の値を与えたいと思う私のコードPythonでのループと.jsonの解析

import json 
import requests 

#Settings 
user_id = 29851266 
page_num= 1 
#Finds user data 
max_p_f = requests.get('http://someforum/users/'+str(user_id)+'/posts.json?page='+str(page_num)) 
json_string = max_p_f.text 
obj = json.loads(json_string) 
max_page = obj['meta']['max_page'] 
current_page = obj['meta']['page'] 
posts_count = obj['meta']['posts_count'] 
username = obj['users'][0]['username'] 
count = 0 
start_page = 1 

while page_num <= max_page: 
    requests.get('http://www.someforum/users/'+str(user_id)+'/posts.json?page='+str(page_num)) 
    page_num += 1 
print("Page "+str(start_page + 1)+ " complete") 
    for x in range(0, 25): 
     data = obj['posts'][x]['body'] 
     file = open(username+"_postdata.txt", 'a') 
     file.write("\n =============="+str(count)+"==================\n") 
     file.write(data) 
     count += 1 
     file.close() 

です。次に、新しい25 ['body']値を取得する2番目のページに移動します。値がテキストファイルに書き込まれるとき、最初の25個の[body]値しか表示されず、whileが完了するまで25個の値が繰り返されるので、私は問題を抱えています。

+0

私はあなた驚いてあなたが 'requests'レスポンスを保存していないので、最初のページからデータを取得しています。それを 'obj'に保存していますか?新しい 'json'ページにアクセスできるようにするために、新しいURL(' start_page'の後のページ)のそれぞれの 'json'データにブラウザを介して手動でアクセスできますか? – davedwards

+0

はい、新しいページにアクセスできます。それをobjに保存する。 –

+0

あなたのコードにはいくつかのエラーがあるようです - 'obj'はどこから値を取得しますか?あなたはいつraw jsonの 'requests'によって返されたオブジェクトをdictに変換しますか? – pml

答えて

0

それは次のようになりますので、私は、要求のためのネイティブ.json()を使用しての代わりにJSONにテキストから、それを変換することにより開始する:

requests.get('http://www.someforum/users/'+str(user_id)+'/posts.json?page='+str(page_num)).json()

また、あなただけの、ループであなたを要求文字列を使用しています「再実際にあなたのループの外のでループ

の内側に新しいページ番号と新しいOBJを保存しない:

max_p_f = 'http://someforum/users/'+str(user_id)+'/posts.json?page='

とあなたのループ内には、次のようになります。

obj = requests.get(max_p_f +str(page_num)).json()

ここで私は非常によく似た何かをするだろうか、サンプルスニペットです:

base_url = 'http://somewebsite/bunchofbjectsonapage.json?page=' 
max_page = 3 
current_page = 0 
while current_page <= max_page: 
    current_page = current_page + 1 
    obj = requests.get(base_url + str(current_page)).json() 
    for item in obj: 
     name = item['company_name'] 
     cat = item['category'] 
     print([name,cat]) 

enter image description here

+0

これはもっと意味がある、ありがとう –