首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -在BeautifulSoup命令上使用json值

Python -在BeautifulSoup命令上使用json值
EN

Stack Overflow用户
提问于 2021-04-02 16:37:46
回答 4查看 54关注 0票数 0

我现在正为一些Python和JSON的东西而挣扎。

我有一个具有一些值的JSON文件:

代码语言:javascript
复制
{
    "labels":{
        "buybox":{
            "container": "'id' : 'product-top'"
        },
        "instock":{
            "container":  "'div', class_= 'row border-bottom'",
            "text": [
                "auf lager",
                "ware neu eingetroffen"
            ]
        }
    }
}

在解析这个Json之后,我希望在一个->命令中使用标签->买方盒容器值,如下所示:

buybox = soup.find(buybox_container)

但是,当我尝试将JSON值写入变量时,变量是一个字符串,我认为这是行不通的,因为“买方箱”变量是空的。

soup.find无法从值"buybox_container“中解释字符串。

有办法让这件事奏效吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-04-02 16:56:47

您的JSON文件似乎正在编码函数参数,您希望以编程方式使用JSON文件以某些方式调用该函数。

这主要是Python的问题,但是如果您像这样编码:

代码语言:javascript
复制
{
    "labels": {
        "buybox": {
            "container": {
                "kwargs": {
                  "id" : "product-top"
                }
            }
        },
        "instock": {
            "container": {
                "args": [
                    "div"
                ],
                "kwargs": {
                    "class_": "row border-bottom"
                }
            ],
            "text": [
                "auf lager",
                "ware neu eingetroffen"
            ]
        }
    }
}

然后像这样引用:

代码语言:javascript
复制
buybox_container_params = json.loads(your_data)["labels"]["buybox"]["container"]
buybox = soup.find(*buybox_container_params.get("args", []), **buybox_container_params.get("kwargs", {}))

它将正确地将看起来像list的JSON解释为args列表,而JSON看起来像dict作为关键字值。这依赖于一些被称为“解包装”的Python特性:

https://docs.python.org/3/reference/expressions.html#expression-lists

https://docs.python.org/3/reference/expressions.html#dictionary-displays

票数 0
EN

Stack Overflow用户

发布于 2021-04-02 16:46:58

只需使用json库来访问容器值。bs4用于解析html。

代码语言:javascript
复制
import json

s = '''{
    "labels":{
        "buybox":{
            "container": "'id' : 'product-top'"
        },
        "instock":{
            "container":  "'div', class_= 'row border-bottom'",
            "text": [
                "auf lager",
                "ware neu eingetroffen"
            ]
        }
    }
}'''
data = json.loads(s)

print(data['labels']['buybox']['container'])
票数 0
EN

Stack Overflow用户

发布于 2021-04-02 16:49:17

如果您试图访问labels.buybox.container的值,一个更简单的方法可能是:

代码语言:javascript
复制
import json
j = open('test.json', 'r').read()
buybox_container = json.loads(j)['labels']['buybox']['container']
print(buybox_container)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66922446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档