Python 如何使用json从文本/javascript中提取内容

Python 如何使用json从文本/javascript中提取内容,python,json,beautifulsoup,python-requests,Python,Json,Beautifulsoup,Python Requests,大家好,我正在尝试使用json python库从文本/javascript中提取内容,但没有成功 这是我的代码: js = soup.find_all('script', {'type': 'text/javascript'})[15] js = json.loads(str(js).split('var item_stock = ')[1]).split('colors: ')[1].split('sizes: ')[1] for size in js: sizee = str(siz

大家好,我正在尝试使用json python库从文本/javascript中提取内容,但没有成功

这是我的代码:

js = soup.find_all('script', {'type': 'text/javascript'})[15]
js = json.loads(str(js).split('var item_stock = ')[1]).split('colors: ')[1].split('sizes: ')[1]
for size in js:
    sizee = str(size).split("size_name")[1].split(":")[1]
    print(sizee)
这是text/javascript:

var item_stock = {"colors": [{"color_code": "1","color_name": "BLACK","color_swatch": "/apis/image/crop?file_name=%2Fphoto%2F2019aw%2F19-04969%2Fs-19-04969_1-1.jpg&width=26&height=26","color_proper": "3,600","color_proper_usd": "33.48","color_proper_eur": "30.24","color_sale": "","color_sale_usd": "","color_sale_eur": "","color_percent": "","html_color": "","image_url": "","stock":  "0","sizes": [{"goods_id": "821","size_code": "OS","size_name": "23-25cm","stock": 0,"size_proper": "3,600","size_proper_usd": "33.48","size_proper_eur": "30.24","size_sale": "","size_sale_usd": "","size_sale_eur": "","size_percent": "","in_sales_flag": "1","stock_request_flag": "","restock_request_flag": 0,"coming_soon_flag": "0",},],"images": "<img src=/photo/2019aw/19-04969/s-19-04969_1-1.jpg>",},{"color_code": "101","color_name": "WHITE","color_swatch": "/apis/image/crop?file_name=%2Fphoto%2F2019aw%2F19-04969%2Fs-19-04969_101-1.jpg&width=26&height=26","color_proper": "3,600","color_proper_usd": "33.48","color_proper_eur": "30.24","color_sale": "","color_sale_usd": "","color_sale_eur": "","color_percent": "","html_color": "","image_url": "","stock":  "3","sizes": [{"goods_id": "822","size_code": "OS","size_name": "23-25cm","stock": 3,"size_proper": "3,600","size_proper_usd": "33.48","size_proper_eur": "30.24","size_sale": "","size_sale_usd": "","size_sale_eur": "","size_percent": "","in_sales_flag": "1","stock_request_flag": "","restock_request_flag": 0,"coming_soon_flag": "0",},],"images": "<img src=/photo/2019aw/19-04969/s-19-04969_101-1.jpg>",},]};
var item_stock={“colors”:[{“color_code”:“1”,“color_name”:“BLACK”,“color_-swatch”:/api/image/crop?file_name=%2Fphoto%2F2019aw%2F19-04969%2Fs-19-04969_1-1.jpg&width=26和height=26”,“color_-property”:“3600”,“color-property_-usd”:“33.48”,“color-property_-eur_-eur”:“30.24”,“color-seal”:“color-seal”:“color\u-seal”:“color”:,“html颜色”:“图像url”:“库存”:“0”,“尺寸”:[{“商品id”:“821”,“尺寸代号”:“OS”,“尺寸名称”:“23-25cm”,“库存”:0,“尺寸规格”:“3600”,“尺寸规格规格规格”:“33.48”,“尺寸规格规格规格规格欧元”:“30.24”,“尺寸销售”:“尺寸销售欧元”:“尺寸销售欧元”:“尺寸百分比”:“销售中的标志”:“1”,“库存申请标志”:“重新进货申请标志”:“:0,“即将到来的不久的旗帜”:“0”,},],“图像”:“,”,{“颜色代码”:“101”,“颜色名称”:“白色”,“颜色样本”:“/apis/image/crop?文件名称=%2Fphoto%2F2019aw%2F19-04969%2Fs-19-04969-101-1.jpg&宽度=26,高度=26”,“颜色本身”:“3600”,“颜色本身的美元”:“33.48”,“颜色本身的欧元”:“30.24”,“颜色出售”:”,“颜色百分比”:“html颜色”:“图像url”:“库存”:“3”,“尺码”:[{“商品id”:“822”,“尺码代号”:“OS”,“尺码名称”:“23-25cm”,“库存”:3,“尺码本质”:“3600”,“尺码本质美元”:“33.48”,“尺码本质欧元”:“30.24”,“尺码本质出售”:“尺码本质美元”:“尺码本质出售”:“尺码本质欧元”:“尺码本质出售”:“尺码本质出售”:“尺码本质欧元”:“尺码本质出售价”:“尺码本质出售价”:“1”,“库存要求”:重新进货请求标志:0,“即将进货标志”:“0”,},],“图像”:“,”,},]};
我试着打印出“尺寸名称”:“23-25厘米”和“颜色名称”:“黑色”

感谢大家!

一旦“json.load”了,就不能使用split或任何其他字符串方法

试试这个:

js = soup.find_all('script', {'type': 'text/javascript'})[15]
js_dict = json.loads(str(js).split('var item_stock = ')[1])
colors = js_dict.get("colors")

for color in colors:
    color_name = color.get("color_name")
    sizes = color.get("sizes")
    for size in sizes:
        print(f"color: {color}, size: {size.get("size_name")}")

@意大利Zagron我还没有解决问题!

@Itay Zagron语法错误?@notme17您的json无效,因此无法“加载”。您必须先修复它。