2017-02-27 5 views
-1

forループでコードを取得しましたが、これは問題なく動作します。しかし、私はwhileループを実装するのに苦労しています。空のjsonオブジェクトが得られているように見えます。jsonオブジェクトが{data:[]、 "result": "ok"}になることを念頭に置いて、どのように '働きながら'得ることができますか?whileループを使ってAjaxを処理する

マイwhileループ

def after_login(self,response): 
    if "smg" in response.body: 
     #for i in range(0,100,10): 
     minime = 2 
     i = 10 
     while len(self.parse_firstcall(response)['data']) > 1 or minime > 1: 
       print('------------------------------------') 
       print(len(self.parse_firstcall(response)['data'])) 
       print(str(minime)) 
       print(str(i)) 
       print('-------------------------------------')  
       yield FormRequest(
        url='URL', 
        formdata={'act': 'serial', 'type': 'search', 'o': str(i), 's': '3','t': '0'}, 
        callback=self.parse_firstcall 
            ) 
       minime = 0 
       i += 10 
       time.sleep(5) 



def parse_firstcall(self,response): 
    try: 
     firstc = response.body  
     self.serialj = json.loads(firstc) 
    except: 
     self.serialj = {"data":['why', 'always', 'me'], "result": "ok"} 
    return self.serialj 

答えて

0

私が見つけた解決策: データは(LEN場合はループhere.Simple私は呼んで作ると確認しながらの必要はありませんが)大きなより1

def after_login(self,response): 
    if "smg" in response.body:  
       yield FormRequest(
        url='url', 
        formdata={'act': 'serial', 'type': 'search', 'o': str(self.req), 's': '3','t': '0'}, 
        callback=self.parse_firstcall 
            ) 


def parse_firstcall(self,response): 
      firstc = response.body  
      serialj = json.loads(firstc) 
      if len(serialj['data']) > 1: 
       print('///////////////////////////////////////////') 
       print('Request number: ' +str(self.req)+ ' been made') 
       print('///////////////////////////////////////////') 
       for i in serialj['data']: 
        self.series[i['title_orig']] = i 
       self.req += 10 
       yield FormRequest(
          url='url', 
          formdata={'act': 'serial', 'type': 'search', 'o': str(self.req), 's': '3','t': '0'}, 
          callback=self.parse_firstcall 
           ) 
です
関連する問題