我想修改下面的代码以允许一次搜索多个商店(通过下面的'数据'部分中的四位商店编号)。完成此任务的最佳方法是什么?我最好能将搜索限制在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"])
我还想在上面的行中打印#商店。
答案 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))