1 回答

TA貢獻1784條經驗 獲得超9個贊
問題是數據不是 json,它是一個 javascript 對象。即使您選擇 json 并應用json.loads
它也會失敗。因此,您將需要可以將 javascript 對象轉換為 json 的第 3 方庫。
我使用demjson
-?
from bs4 import BeautifulSoup
import demjson
html = """<script type="text/javascript">
? ? ? ??
? ? ? ? ? ? var chart;
? ? ? ? ? ? var screenWidth = window.innerWidth * 0.935 * 1;? ??
? ? ? ? ? ? $(document).ready(function() {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? series: [{
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? name: 'Water',
? ? ? ? ? ? ? ? ? ? data: [[90, 50000],[91, 53000]]
? ? ? ? ? ? ? ? ? },{
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? name: 'Tea',
? ? ? ? ? ? ? ? ? ? data: [[90, 47000],[91, 53000]]
? ? ? ? ? ? ? ? ? },{
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? name: 'Tonic',
? ? ? ? ? ? ? ? ? ? data: [[90, 63000],[91, 68000]]
? ? ? ? ? ? ? ? ? }]
? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ??
? ? ? ? ? ? });
? ? ? ? ? ? ? ??
? ? ? ? </script>"""
script = soup.find("script").text.strip()
data = demjson.decode(script[script.index("{"):script.index("});")] + "}")
print(type(data))
print("-" * 10)
print(data)
輸出:
<class 'dict'>
----------
{'series': [{'name': 'Water', 'data': [[90, 50000], [91, 53000]]}, {'name': 'Tea', 'data': [[90, 47000], [91, 53000]]}, {'name': 'Tonic', 'data': [[90, 63000], [91, 68000]]}]}
添加回答
舉報