2017-08-18 12 views
0

私はウェブサイトからデータを取得するためにscrapyを使用していますが、この関数はデータを別の関数に渡します。この関数を使用すると出力を返すことはできません!プリントしてみましたが、 jsonファイルでデータを取得します。 funcの返品明細の印刷方法は?分離された関数形式でデータを返すには、どのように処理するのか?

def parse(self, response): 
    all_tr= list() 
    for tr in response.xpath('//tr').extract(): 
      all_tr.append(tr) 
    tr_data = list() 
    city_tr = list() 
    for tr in all_tr: 
      if re.findall(r'class="city".+name.+?<', tr): 
      city_tr.append(tr) 
      else: 
      pass 
    c= 0 
    const =1 
    while const ==1: 
      try: 
      start=city_tr[c] 
      end= city_tr[c+1] 
      indexStart=all_tr.index(start) 
      indexEnd=all_tr.index(end) 
      tr_data.append(all_tr[indexStart:indexEnd]) 
      c=c+1 
      except IndexError: 
      const=2 
      tr_data.append(all_tr[all_tr.index(start):]) 
    for tr in tr_data: 
      func_2(tr) 

私は、func_2でいくつかの操作を持っているし、別のfnction "PRIN FUNC"

def print_func(city,days, tr): 
    if len(days)==0: 
     item=PropertiesItem() 
     item['Name']= "" 
     item['City']= city 
     item['State']= "CA" 
     return item 

print_funcは何も返さない、誰もが私の理由を教えてください可能性にそれを渡しますか?

+0

コードを正しくフォーマットしてください。 –

+0

@ TarunLalwani done。 print funcがアイテムを返さない理由についてご存知ですか? –

答えて

0

構文解析は、解析関数の戻り値をチェックします。あなたはその中の関数を呼び出し、それが値を返す捨てる場合さて、あなたはだからあなたのコードが

for tr in tr_data: 
    yield func_2(tr) 

for tr in tr_data: 
    func_2(tr) 

から変更する必要があり、そのような

としてparse関数から何も返されません

これは、func_2が返す項目がすべて、scrapyフレームワークに渡されたことを確認します。あなたが値を返すことをキャプチャし、あなたが解析機能で値を取得し、そこからそれを得るために必要な呼び出し元の関数に

def func_2(....): 
    .... 
    item = print_func(...) 
    ... 
    return item 

それを渡す必要があるので、また、あなたのfunc_2機能であなたは、print_funcを呼び出すことになります。どの関数からでもそれを返すだけでは機能しません。

+0

私は非常に多くのネステッド機能を持っています。データを構文解析関数に渡して、リスト内でそれらを収集し、返すためにリストをループすることはできますか? –

+0

はい、メインの解析機能では、すべての場所を返すだけで返す必要があります。リストを返すと、 'yield from'を使うことができます。 Python 2.xを使用している場合、ループして項目を生成します –

関連する問題