python - 使用 Python 使用特定关键字解析 JSON
问题描述
我正在尝试解析网站股票的 JSON。
JSON:https ://www.ssense.com/en-us/men/sneakers.json
所以我想从用户那里获取一些关键词。然后我想使用这些关键字解析 JSON 以查找项目的名称并(在这种特定情况下)返回 ID、SKU 和 URL。
例如:如果我输入“Black Fennec”,我想解析 JSON 并找到 Black Fennec Sneakers 的 ID、SKU 和 URL(ID 为 3297299,SKU 为 191422M237006,url 为 /men/产品/ps-paul-smith/black-fennec-sneakers/3297299)
我从来没有尝试过做这样的事情。基于一些显示如何解析 JSON 的指南,我从以下内容开始:
r = requests.Session()
stock = r.get("https://www.ssense.com/en-us/men/sneakers.json",headers = headers)
obj json_data = json.loads(stock.text)
然而我现在很困惑。如何根据关键字找到产品,以及如何获取 ID、Url 和 SKU 或它?
解决方案
有多种方法可以处理输出。不知道你想用它做什么。但这应该让你继续前进。
编辑1:
import requests
r = requests.Session()
obj_json_data = r.get("https://www.ssense.com/en-us/men/sneakers.json").json()
products = obj_json_data['products']
keyword = input('Enter a keyword: ')
for product in products:
if keyword.upper() in product['name'].upper():
name = product['name']
id_var = product['id']
sku = product['sku']
url = product['url']
print ('Product: %s\nID: %s\nSKU: %s\nURL: %s' %(name, id_var, sku, url))
# if you only want to return the first match, uncomment next line
#break
我还设置了将其存储到数据框和/或列表中。只是为了提供一些选择去哪里。
import requests
import pandas as pd
r = requests.Session()
obj_json_data = r.get("https://www.ssense.com/en-us/men/sneakers.json").json()
products = obj_json_data['products']
keyword = input('Enter a keyword: ')
products_found = []
results = pd.DataFrame()
for product in products:
if keyword.upper() in product['name'].upper():
name = product['name']
id_var = product['id']
sku = product['sku']
url = product['url']
temp_df = pd.DataFrame([[name, id_var, sku, url]], columns=['name','id','sku','url'])
results = results.append(temp_df)
products_found = products_found.append(name)
print ('Product: %s\nID: %s\nSKU: %s\nURL: %s' %(name, id_var, sku, url))
if products_found == []:
print ('Nothing found')
编辑 2:这是另一种方法,将 json 转换为数据框,然后按名称中包含关键字的行进行过滤(在我看来,这实际上是一个更好的解决方案)
import requests
import pandas as pd
from pandas.io.json import json_normalize
r = requests.Session()
obj_json_data = r.get("https://www.ssense.com/en-us/men/sneakers.json").json()
products = obj_json_data['products']
products_df = json_normalize(products)
keyword = input('Enter a keyword: ')
products_found = []
results = pd.DataFrame()
results = products_df[products_df['name'].str.contains(keyword, case = False)]
#print (results[['name', 'id', 'sku', 'url']])
products_found = list(results['name'])
if products_found == []:
print ('Nothing found')
else:
print ('Found: '+ str(products_found))
推荐阅读
- angular - Angular BehaviouralSubjects
- android - 如何解析 response.body okhttp
- javascript - Jquery .load() 仅父级并忽略子级
- amazon-web-services - Terraform for AWS 中的入口安全组是什么
- php - 未捕获的异常 PDOException : 完整性约束违规错误
- function - 发送一个函数去 html/模板有一个错误:函数“”未定义
- c++ - 使用 FFmpeg 解码 YUYV422 原始图像
- python - 查询在 bigquery Web UI 中返回非空数据集,但在 python 脚本中设置为空
- c++ - 如何在c ++中拆分字符串的一部分?
- raspberry-pi - 发送失败时从 gammu 发件箱中删除短信