首页 > 解决方案 > 任何帮助,在从 HTML 解析 JSON 时卡住我的代码。需要告诉我库存何时为真

问题描述

我在 HTML 中有这个 JSON 输出,我想检查库存。我已经构建了所有东西,但是当 Python 需要告诉我库存是否真实时,我陷入了困境。

所有数字都是荷兰各地的商店。如果其中只有一个是 TRUE,我只想编写 Python 打印“In Stock”的代码。我做了'' if ... or ... == 'True',但是如果其中一家商店是假的,它告诉我它仍然缺货。

知道我需要使用什么样的代码让 Python 告诉我其中一家商店是否有库存吗?

我正在使用 BS4,Beautifulsoup 来解析 JSON。

只是停留在 ''If... == 'True' 部分。

谢谢!

{"1665134":{"642":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1298":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1299":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1322":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1325":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1966":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1208":{"hasStock":false,"hasShowModel":false,"lowStock":false},"193":{"hasStock":false,"hasShowModel":false,"lowStock":false},"194":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1102":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1360":{"hasStock":false,"hasShowModel":false,"lowStock":false},"852":{"hasStock":false,"hasShowModel":false,"lowStock":false},"853":{"hasStock":false,"hasShowModel":false,"lowStock":false},"854":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1239":{"hasStock":false,"hasShowModel":false,"lowStock":false},"855":{"hasStock":false,"hasShowModel":false,"lowStock":false},"856":{"hasStock":false,"hasShowModel":false,"lowStock":false},"857":{"hasStock":false,"hasShowModel":false,"lowStock":false},"858":{"hasStock":false,"hasShowModel":false,"lowStock":false},"859":{"hasStock":false,"hasShowModel":false,"lowStock":false},"860":{"hasStock":false,"hasShowModel":false,"lowStock":false},"861":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1246":{"hasStock":false,"hasShowModel":false,"lowStock":false},"862":{"hasStock":false,"hasShowModel":false,"lowStock":false},"863":{"hasStock":false,"hasShowModel":false,"lowStock":false},"864":{"hasStock":false,"hasShowModel":false,"lowStock":false},"865":{"hasStock":false,"hasShowModel":false,"lowStock":false},"866":{"hasStock":false,"hasShowModel":false,"lowStock":false},"867":{"hasStock":false,"hasShowModel":false,"lowStock":false},"484":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1380":{"hasStock":false,"hasShowModel":false,"lowStock":false},"868":{"hasStock":false,"hasShowModel":false,"lowStock":false},"869":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1381":{"hasStock":false,"hasShowModel":false,"lowStock":false},"870":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1255":{"hasStock":false,"hasShowModel":false,"lowStock":false},"871":{"hasStock":false,"hasShowModel":false,"lowStock":false},"360":{"hasStock":false,"hasShowModel":false,"lowStock":false},"872":{"hasStock":false,"hasShowModel":false,"lowStock":false},"873":{"hasStock":false,"hasShowModel":false,"lowStock":false},"746":{"hasStock":false,"hasShowModel":false,"lowStock":false},"875":{"hasStock":false,"hasShowModel":false,"lowStock":false},"876":{"hasStock":false,"hasShowModel":false,"lowStock":false},"749":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1391":{"hasStock":false,"hasShowModel":false,"lowStock":false},"880":{"hasStock":false,"hasShowModel":false,"lowStock":false},"499":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1275":{"hasStock":false,"hasShowModel":false,"lowStock":false},"1149":{"hasStock":false,"hasShowModel":false,"lowStock":false},"637":{"hasStock":false,"hasShowModel":false,"lowStock":false}}}

Python代码;

def monitor():
    try:
        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.content, 'html.parser')
        voorraad = response.json()
        v1 = (voorraad['{}'.format(productid)]['193']['hasStock'])
        v2 = (voorraad['{}'.format(productid)]['194']['hasStock'])
        v3 = (voorraad['{}'.format(productid)]['360']['hasStock'])
        v4 = (voorraad['{}'.format(productid)]['484']['hasStock'])
        v5 = (voorraad['{}'.format(productid)]['499']['hasStock'])
        v6 = (voorraad['{}'.format(productid)]['637']['hasStock'])
        v7 = (voorraad['{}'.format(productid)]['642']['hasStock'])
        v8 = (voorraad['{}'.format(productid)]['746']['hasStock'])
        v9 = (voorraad['{}'.format(productid)]['749']['hasStock'])
        v10 = (voorraad['{}'.format(productid)]['852']['hasStock'])
        v11 = (voorraad['{}'.format(productid)]['853']['hasStock'])
        v12 = (voorraad['{}'.format(productid)]['854']['hasStock'])
        v13 = (voorraad['{}'.format(productid)]['855']['hasStock'])
        v14 = (voorraad['{}'.format(productid)]['856']['hasStock'])
        v15 = (voorraad['{}'.format(productid)]['857']['hasStock'])
        v16 = (voorraad['{}'.format(productid)]['858']['hasStock'])
        v17 = (voorraad['{}'.format(productid)]['859']['hasStock'])
        v18 = (voorraad['{}'.format(productid)]['860']['hasStock'])
        v19 = (voorraad['{}'.format(productid)]['861']['hasStock'])
        v20 = (voorraad['{}'.format(productid)]['862']['hasStock'])
        v21 = (voorraad['{}'.format(productid)]['863']['hasStock'])
        v22 = (voorraad['{}'.format(productid)]['864']['hasStock'])
        v23 = (voorraad['{}'.format(productid)]['865']['hasStock'])
        v24 = (voorraad['{}'.format(productid)]['866']['hasStock'])
        v25 = (voorraad['{}'.format(productid)]['867']['hasStock'])
        v26 = (voorraad['{}'.format(productid)]['868']['hasStock'])
        v27 = (voorraad['{}'.format(productid)]['869']['hasStock'])
        v28 = (voorraad['{}'.format(productid)]['870']['hasStock'])
        v29 = (voorraad['{}'.format(productid)]['871']['hasStock'])
        v30 = (voorraad['{}'.format(productid)]['872']['hasStock'])
        v31 = (voorraad['{}'.format(productid)]['873']['hasStock'])
        v32 = (voorraad['{}'.format(productid)]['875']['hasStock'])
        v33 = (voorraad['{}'.format(productid)]['876']['hasStock'])
        v34 = (voorraad['{}'.format(productid)]['880']['hasStock'])
        v35 = (voorraad['{}'.format(productid)]['1102']['hasStock'])
        v36 = (voorraad['{}'.format(productid)]['1149']['hasStock'])
        v37 = (voorraad['{}'.format(productid)]['1208']['hasStock'])
        v38 = (voorraad['{}'.format(productid)]['1239']['hasStock'])
        v39 = (voorraad['{}'.format(productid)]['1246']['hasStock'])
        v40 = (voorraad['{}'.format(productid)]['1255']['hasStock'])
        v41 = (voorraad['{}'.format(productid)]['1275']['hasStock'])
        v42 = (voorraad['{}'.format(productid)]['1298']['hasStock'])
        v43 = (voorraad['{}'.format(productid)]['1299']['hasStock'])
        v44 = (voorraad['{}'.format(productid)]['1322']['hasStock'])
        v45 = (voorraad['{}'.format(productid)]['1325']['hasStock'])
        v46 = (voorraad['{}'.format(productid)]['1360']['hasStock'])
        v47 = (voorraad['{}'.format(productid)]['1380']['hasStock'])
        v48 = (voorraad['{}'.format(productid)]['1381']['hasStock'])
        v49 = (voorraad['{}'.format(productid)]['1391']['hasStock'])
        v50 = (voorraad['{}'.format(productid)]['1966']['hasStock'])

        if any(v1, v2, v3):
            print(colored('[{}] ' + 'IN STOCK | ' + (product_title), 'green').format(str(datetime.now())))
            send_to_discord(product_title, webpagina, footerlogo, url, image_url)
            time.sleep(50)
            exit()
        else:
            print(colored('[{}] ' + 'OUT OF STOCK | ' + (product_title), 'red').format(str(datetime.now())))
            time.sleep(2)

任何是一个测试,不熟悉它......

标签: pythonjsonif-statementbeautifulsoup

解决方案


如果你有那么多手动输入,每个都做同样的事情,你的代码就会失控。首先,我建议列出产品代码

products = [193, 194, 360, 384, ...]

来自 js 的 response.json() 不是你在 python 中使用的。首次进口

import json

然后分别使用 json.loads() 或 json.dumps() 来“解析”和“字符串化”

store = json.loads(<soup.whatever>)

然后我假设“1665134”是商品 id 或其他东西,您可以遍历后续对象

for product in store:
    if(product['hasStock']):
        # do stuff with stock
    else:
        # has no stock, you're sol

推荐阅读