如何在URL中间增加变量并为多个查询输出?

时间:2016-06-30 19:40:34

标签: python json

我想修改下面的代码以允许一次搜索多个商店(通过下面的'数据'部分中的四位商店编号)。完成此任务的最佳方法是什么?我最好能将搜索限制在50-100个商店。

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"])

我还想在上面的行中打印#商店。

2 个答案:

答案 0 :(得分:0)

request.post调用中的data对象可以像任何其他字符串一样构造。然后代表它的变量可以代替你的" 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"]);
}

我不熟悉你使用" print",但我只使用过客户端javascript。

答案 1 :(得分: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))