【问题标题】:How to get the json data in a var script from a website using BeautifulSoup?如何使用 BeautifulSoup 从网站获取 var 脚本中的 json 数据?
【发布时间】:2019-11-16 16:04:19
【问题描述】:

我正在尝试获取在检查特定 URL 的页面源时看到的 JSON 数据。这是网址:https://www.uniqlo.com/de/de/product/ut-bedrucktes-t-shirt-kaws-summer-421771.html

我的目标是获取“ats”的“定价”和“可用性”:“xxx”

这里是部分源代码:

</div>
<div class="product-detail">

<script>
var pdpVariationsJSON = 

{"color-COL08|size-SMA002":{"id":"421771COL08SMA002000","attributes":{"color":"Dunkelgrau","size":"XS"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"203","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA003":{"id":"421771COL08SMA003000","attributes":{"color":"Dunkelgrau","size":"S"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"106","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA004":{"id":"421771COL08SMA004000","attributes":{"color":"Dunkelgrau","size":"M"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"218","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA005":{"id":"421771COL08SMA005000","attributes":{"color":"Dunkelgrau","size":"L"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"7","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA006":{"id":"421771COL08SMA006000","attributes":{"color":"Dunkelgrau","size":"XL"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"83","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA007":{"id":"421771COL08SMA007000","attributes":{"color":"Dunkelgrau","size":"XXL"},"availability":{"status":"NOT_AVAILABLE","statusQuantity":"0","inStock":false,"ats":"0","inStockDate":"","availableForSale":false,"purchaseLevel":"","levels":{"IN_STOCK":0,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":1},"isAvailable":false,"inStockMsg":"0 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA008":{"id":"421771COL08SMA008000","attributes":{"color":"Dunkelgrau","size":"3XL"},"availability":{"status":"NOT_AVAILABLE","statusQuantity":"0","inStock":false,"ats":"0","inStockDate":"","availableForSale":false,"purchaseLevel":"","levels":{"IN_STOCK":0,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":1},"isAvailable":false,"inStockMsg":"0 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA002":{"id":"421771COL68SMA002000","attributes":{"color":"Blau","size":"XS"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"159","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA003":{"id":"421771COL68SMA003000","attributes":{"color":"Blau","size":"S"},"availability":{"status":"NOT_AVAILABLE","statusQuantity":"0","inStock":false,"ats":"0","inStockDate":"","availableForSale":false,"purchaseLevel":"","levels":{"IN_STOCK":0,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":1},"isAvailable":false,"inStockMsg":"0 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA004":{"id":"421771COL68SMA004000","attributes":{"color":"Blau","size":"M"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"63","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA005":{"id":"421771COL68SMA005000","attributes":{"color":"Blau","size":"L"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"9","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA006":{"id":"421771COL68SMA006000","attributes":{"color":"Blau","size":"XL"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"136","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA007":{"id":"421771COL68SMA007000","attributes":{"color":"Blau","size":"XXL"},"availability":{"status":"NOT_AVAILABLE","statusQuantity":"0","inStock":false,"ats":"0","inStockDate":"","availableForSale":false,"purchaseLevel":"","levels":{"IN_STOCK":0,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":1},"isAvailable":false,"inStockMsg":"0 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA008":{"id":"421771COL68SMA008000","attributes":{"color":"Blau","size":"3XL"},"availability":{"status":"NOT_AVAILABLE","statusQuantity":"0","inStock":false,"ats":"0","inStockDate":"","availableForSale":false,"purchaseLevel":"","levels":{"IN_STOCK":0,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":1},"isAvailable":false,"inStockMsg":"0 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}}}
;
</script>

<div id="product-content">

我已经用 json.loads() 试过了,但这让我遇到了这个错误:

"raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError:预期值:第 1 行第 1 列 (char 0)"

这是我的代码片段到目前为止的样子:

import requests

from bs4 import BeautifulSoup

import json

url = "https://www.uniqlo.com/de/de/product/ut-bedrucktes-t-shirt-kaws-summer-421771.html"

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, "lxml")



div = soup.find("div", class_="product-detail")

scr = str(div.find("script"))

print(scr)

这是我现在打印时得到的结果:

<script>
var pdpVariationsJSON = 

{"color-COL08|size-SMA002":{"id":"421771COL08SMA002000","attributes":{"color":"Dunkelgrau","size":"XS"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"203","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA003":{"id":"421771COL08SMA003000","attributes":{"color":"Dunkelgrau","size":"S"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"106","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA004":{"id":"421771COL08SMA004000","attributes":{"color":"Dunkelgrau","size":"M"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"218","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA005":{"id":"421771COL08SMA005000","attributes":{"color":"Dunkelgrau","size":"L"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"7","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA006":{"id":"421771COL08SMA006000","attributes":{"color":"Dunkelgrau","size":"XL"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"83","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA007":{"id":"421771COL08SMA007000","attributes":{"color":"Dunkelgrau","size":"XXL"},"availability":{"status":"NOT_AVAILABLE","statusQuantity":"0","inStock":false,"ats":"0","inStockDate":"","availableForSale":false,"purchaseLevel":"","levels":{"IN_STOCK":0,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":1},"isAvailable":false,"inStockMsg":"0 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL08|size-SMA008":{"id":"421771COL08SMA008000","attributes":{"color":"Dunkelgrau","size":"3XL"},"availability":{"status":"NOT_AVAILABLE","statusQuantity":"0","inStock":false,"ats":"0","inStockDate":"","availableForSale":false,"purchaseLevel":"","levels":{"IN_STOCK":0,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":1},"isAvailable":false,"inStockMsg":"0 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA002":{"id":"421771COL68SMA002000","attributes":{"color":"Blau","size":"XS"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"159","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA003":{"id":"421771COL68SMA003000","attributes":{"color":"Blau","size":"S"},"availability":{"status":"NOT_AVAILABLE","statusQuantity":"0","inStock":false,"ats":"0","inStockDate":"","availableForSale":false,"purchaseLevel":"","levels":{"IN_STOCK":0,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":1},"isAvailable":false,"inStockMsg":"0 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA004":{"id":"421771COL68SMA004000","attributes":{"color":"Blau","size":"M"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"63","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA005":{"id":"421771COL68SMA005000","attributes":{"color":"Blau","size":"L"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"9","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA006":{"id":"421771COL68SMA006000","attributes":{"color":"Blau","size":"XL"},"availability":{"status":"IN_STOCK","statusQuantity":"0","inStock":true,"ats":"136","inStockDate":"","availableForSale":true,"purchaseLevel":"","levels":{"IN_STOCK":1,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":0},"isAvailable":true,"inStockMsg":"1 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA007":{"id":"421771COL68SMA007000","attributes":{"color":"Blau","size":"XXL"},"availability":{"status":"NOT_AVAILABLE","statusQuantity":"0","inStock":false,"ats":"0","inStockDate":"","availableForSale":false,"purchaseLevel":"","levels":{"IN_STOCK":0,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":1},"isAvailable":false,"inStockMsg":"0 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}},"color-COL68|size-SMA008":{"id":"421771COL68SMA008000","attributes":{"color":"Blau","size":"3XL"},"availability":{"status":"NOT_AVAILABLE","statusQuantity":"0","inStock":false,"ats":"0","inStockDate":"","availableForSale":false,"purchaseLevel":"","levels":{"IN_STOCK":0,"PREORDER":0,"BACKORDER":0,"NOT_AVAILABLE":1},"isAvailable":false,"inStockMsg":"0 Produkt(e) verfügbar","preOrderMsg":"0 Produkt(e) sind zur Vorbestellung verfügbar.","backOrderMsg":"Back Order 0 item(s)"},"pricing":{"showStandardPrice":false,"isPromoPrice":false,"standard":14.9,"formattedStandard":"14,90 €","sale":14.9,"formattedSale":"14,90 €","salePriceMoney":{},"standardPriceMoney":{},"quantities":[{"unit":"","value":0}]}}}
;
</script>

【问题讨论】:

    标签: python json python-3.x web-scraping beautifulsoup


    【解决方案1】:

    您可以使用re&lt;script&gt; 标签中提取重要部分,并使用json.loads 对其进行解析:

    import re
    import json
    import requests
    from bs4 import BeautifulSoup
    
    url = "https://www.uniqlo.com/de/de/product/ut-bedrucktes-t-shirt-kaws-summer-421771.html"
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
    
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, "lxml")
    
    div = soup.find("div", class_="product-detail")
    scr = str(div.find("script"))
    
    data = json.loads(re.findall(r'pdpVariationsJSON[^{]+(.*);', str(scr), flags=re.DOTALL)[0])
    
    print(json.dumps(data, indent=4))
    

    打印:

    {
        "color-COL08|size-SMA002": {
            "id": "421771COL08SMA002000",
            "attributes": {
                "color": "Dunkelgrau",
                "size": "XS"
            },
            "availability": {
                "status": "IN_STOCK",
                "statusQuantity": "0",
                "inStock": true,
                "ats": "203",
                "inStockDate": "",
                "availableForSale": true,
                "purchaseLevel": "",
                "levels": {
                    "IN_STOCK": 1,
                    "PREORDER": 0,
                    "BACKORDER": 0,
                    "NOT_AVAILABLE": 0
                },
                "isAvailable": true,
                "inStockMsg": "1 Produkt(e) verf\u00fcgbar",
                "preOrderMsg": "0 Produkt(e) sind zur Vorbestellung verf\u00fcgbar.",
                "backOrderMsg": "Back Order 0 item(s)"
            },
            "pricing": {
                "showStandardPrice": false,
                "isPromoPrice": false,
                "standard": 14.9,
                "formattedStandard": "14,90 \u20ac",
                "sale": 14.9,
                "formattedSale": "14,90 \u20ac",
                "salePriceMoney": {},
                "standardPriceMoney": {},
                "quantities": [
                    {
                        "unit": "",
                        "value": 0
                    }
                ]
            }
        },
        "color-COL08|size-SMA003": {
            "id": "421771COL08SMA003000",
            "attributes": {
                "color": "Dunkelgrau",
                "size": "S"
            },
            "availability": {
                "status": "IN_STOCK",
                "statusQuantity": "0",
                "inStock": true,
                "ats": "106",
                "inStockDate": "",
                "availableForSale": true,
                "purchaseLevel": "",
                "levels": {
                    "IN_STOCK": 1,
                    "PREORDER": 0,
                    "BACKORDER": 0,
                    "NOT_AVAILABLE": 0
                },
                "isAvailable": true,
                "inStockMsg": "1 Produkt(e) verf\u00fcgbar",
                "preOrderMsg": "0 Produkt(e) sind zur Vorbestellung verf\u00fcgbar.",
                "backOrderMsg": "Back Order 0 item(s)"
            },
            "pricing": {
                "showStandardPrice": false,
                "isPromoPrice": false,
                "standard": 14.9,
                "formattedStandard": "14,90 \u20ac",
                "sale": 14.9,
                "formattedSale": "14,90 \u20ac",
                "salePriceMoney": {},
                "standardPriceMoney": {},
                "quantities": [
                    {
                        "unit": "",
                        "value": 0
                    }
                ]
            }
        },
    
    ... and so on.
    

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 2019-05-31
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      相关资源
      最近更新 更多