2016-06-30 4 views
-1

以下のコードを変更して、複数の店舗を同時に検索することができます(下記の 'データ'セクションの4桁の店舗番号を使用)。これを達成する最良の方法は何ですか?私は、検索を50〜100店舗に制限できるのが望ましいでしょう。URLの途中で変数をインクリメントして複数のクエリを出力する方法はありますか?

import requests 
import json 

js = requests.post("http://www.walmart.com/store/ajax/search", 
       data={"searchQuery":"store=2516&size=18&dept=4044&query=43888060"}).json() 

data = json.loads(js['searchResults']) 

res = data["results"][0] 
print(res["name"], res["inventory"]) 

上記の行に印刷された店舗もお待ちしております。

答えて

0

data request.postのオブジェクトは、他の文字列と同様に構築できます。そして、それを表す変数はあなたの "store = 2516 ..."文字列の代わりを取ることができます。このように、想定しrequestsは、外側の関数のどこかで定義されており、再利用することができます。

var stores = ["2516","3498","5478"]; 
stores.forEach(makeTheCall); 

function makeTheCall(element, index, array) { 
    storeQuery = "store=" + element + "&size=18&dept=4044&query=43888060"; 
    js = requests.post("http://www.walmart.com/store/ajax/search", 
      data={"searchQuery":storeQuery}).json() 
    data = json.loads(js['searchResults']) 
    res = data["results"][0] 
    console.log("name: " + res["name"] + ", store: " + element + ", inventory: " + res["inventory"]); 
} 

私は、「印刷」の使用に慣れていないんだけど、私は今まで、クライアント側のJavaScriptを使用しました。

+0

Err。質問はPythonに関するものであり、Javascriptに関するものではありません。 – nephtes

+0

ハハ、私は一日中ジャバスクリプトを見つめていて気づかなかった。ごめんなさい。私の答えの謎がとにかくうまくいかなければ、私は驚かないだろう。ストア番号の配列を繰り返し、それぞれの文字列を作成し、request.post関数にsearchQueryプロパティの値として送信します。 stores.forEachの代わりに 'store for store'を使用したいと思うでしょう – dcoli

0

APIは複数のストアの検索をサポートしていないため、複数のリクエストを行う必要があります。

import requests 
import json 
from collections import defaultdict 

results = defaultdict(list) 

stores = [2516, 1234, 5678] 
url = "http://www.walmart.com/store/ajax/search" 
query = "store={}&size=18&dept=4044&query=43888060" 

for store in stores: 
    r = requests.post(url, data={'searchQuery': query.format(store)}) 
    r.raise_for_status() 
    try: 
     data = json.loads(r.json()['searchResults'])['results'][0] 
     results[store].append((data['name'],data['inventory'])) 
    except IndexError: 
     continue 

for store, data in results.iteritems(): 
    print('Store: {}'.format(store)) 
    if data: 
     for name, inventory in data: 
      print('\t{} - {}'.format(name, inventory)) 
+0

ありがとう - 特定の店が特定の店で返されたjsonに基づいて在庫を持っていないとエラーになります。それを回避するための提案? –

+0

try/exceptを追加するだけです。 –

+0

店舗のjsonを見ると、在庫がないものはjsonに "results":["vs" 'results':[たくさんの変数] 'があります。空白の結果があるもの - ちょうどあなたの返事を見ました - 私はtry/expectの勧告を調べます。 –

関連する問題