javascript - 如何在 Python 中使用 Javascript 对象文字
问题描述
通过 Beautifulsoup 模块,我提取了一个 HTML 页面。从那个页面,我进一步提取了一个 Javascript 脚本标签。在 script 标签内,有一个我想使用的对象文字。您可以看到我想要实现的目标:
<script>
var main_obj = {
"link":"",
"stock":"",
"price":[{"qty":1000,"value":"100$"}, {"qty":10000,"value":"1000$"}]
}
</script>
我想访问 main_obj 中 price 变量的对象文字中的 qty 和 value 变量。谢谢
解决方案
一种选择是使用selenium
. 特别是,您可以使用execute_script
它转换为 Python 可以轻松解析的 JSON 字符串。
由于我不知道您正在使用的页面的 URL 是什么,因此我只是创建了一个本地 HTML 文件,其中包含您的脚本标记示例。使用无头不是强制性的,我只添加了该选项,因此浏览器窗口不会打开。
test.html
<!DOCTYPE html>
<html>
<body>
<script>
var main_obj = {
"link": "",
"stock": "",
"price": [{"qty": 1000, "value": "100$"}, {"qty": 10000, "value": "1000$"}]
}
</script>
</body>
</html>
脚本
In[2]: import os
...: import json
...:
...: from selenium import webdriver
...:
...: chrome_options = webdriver.ChromeOptions()
...: chrome_options.add_argument('--headless')
...: driver = webdriver.Chrome(chrome_options=chrome_options)
...:
...: driver.get('file://{}/test.html'.format(os.getcwd()))
...: json_string = driver.execute_script('return JSON.stringify(main_obj)')
...: driver.quit()
...:
...: json_data = json.loads(json_string)
In[3]: json_data
Out[3]:
{'link': '',
'stock': '',
'price': [{'qty': 1000, 'value': '100$'}, {'qty': 10000, 'value': '1000$'}]}
In[4]: for item in json_data['price']:
...: print('Quantity: {:d}\tValue: ${:.2f}'.format(
...: item['qty'], float(item['value'].rstrip('$'))
...: ))
...:
Quantity: 1000 Value: $100.00
Quantity: 10000 Value: $1000.00
推荐阅读
- php - Laravel group by 内联选择语句的问题
- php - PHP 上的 CURL 版本支持
- javascript - 如何使用从列表创建的对象获取管理 React 状态?
- c# - LiteDb 集合在按 id 搜索时返回无效数据
- laravel - 类别名称未显示在产品索引中
- javascript - 过滤并创建一个新数组
- javascript - SetInterval 不重复 [控制在循环结束时转移到 Chrome 调试器中的未定义窗口]
- c# - 在 xamarin 表单列表视图中查找和元素
- amazon-web-services - 如何测量亚马逊媒体直播中的延迟
- javascript - Vuetify - 应用导航抽屉不会将内容推送到一边