python-3.x - 如何使用 bs4 访问脚本标签中的内容
问题描述
我是 python 新手,我正在尝试使用漂亮的汤在具有 dataLayer 的页面上找到一个脚本标签,然后检索 postNo 的值并打印它。
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
<!-- Data Layer - Begin -->
<script>
dataLayer = [
{
'country': 'UnitedKingdom',
'site': 'Blog',
'postNo': '34',
'pageType': 'Home',
'pageType2': 'Blog',
'pageType3': 'Top Tips'
}
];
</script>
<!-- Data Layer - End -->
</head>
任何帮助或指示将不胜感激。谢谢
解决方案
import requests
import bs4
import json
html = '''
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
<!-- Data Layer - Begin -->
<script>
dataLayer = [
{
'country': 'UnitedKingdom',
'site': 'Blog',
'postNo': '34',
'pageType': 'Home',
'pageType2': 'Blog',
'pageType3': 'Top Tips'
}
];
</script>
<!-- Data Layer - End -->
</head>'''
soup = bs4.BeautifulSoup(html, 'html.parser')
scripts = soup.find_all('script')
for script in scripts:
if 'dataLayer = ' in script.text:
jsonStr = script.text.strip()
jsonStr = jsonStr.split('[')[1].strip()
jsonStr = jsonStr.split(']')[0].strip()
jsonStr = jsonStr.replace("'", '"')
jsonObj = json.loads(jsonStr)
print (jsonObj['postNo'])
输出:
print (jsonObj['postNo'])
34
推荐阅读
- orientdb - 在一个查询中返回顶点和边属性
- json - 如何在反应应用程序上指定 http 响应标头?
- swift - Swift:EXC_BAD_ACCESS 错误访问字典上的键
- python - Python Pandas - 将 unicode 数据转换为数据框,以便我可以追加
- angular - 如何访问脚本标签中的角度变量
- angular - 过滤项目 FormArray
- automated-tests - Katalon Studio Web Recorder 看到当前步骤
- spring-integration - 通过 JmsTransactionManager 通过 errorChannel 抛出的 Spring Integration 重新交付不遵守 maximumRedeliveries
- angular - Angular 2+:获取@ViewChild() 的子元素
- javascript - onkeyup 激活许多 ajax 请求