我正在尝试使用 Python 和 Beautifulsoup 抓取一些数据。我知道如何从脚本标签中获取文本。[ ] 之间的数据是有效的 json。
<script>
dataLayer =
[
{
"p":{
"t":"text1",
"lng":"text2",
"vurl":"text3"
},
"c":{ },
"u":{ },
"d":{ },
"a":{ }
}
]
</script>
我已经阅读了这个回复,它几乎完成了我想要的: 用 BeautifulSoup 提取 <Script 的内容
这是我的代码:
import urllib.request
from bs4 import BeautifulSoup
import json
url = "www.example.com"
html = urllib.request.urlopen(url)
soup = BeautifulSoup(html, "html.parser")
raw_data = soup.find("script")
理想情况下,我会这样做:
json_dict = json.loads(raw_data)
并通过字典访问数据。但这不起作用,因为
"<script> dataLayer ="
在有效的 json 之前,最后是 script 标签。我试过将 raw_data 修剪为字符串,如下所示:
raw_data[20:]
但这不起作用,因为汤对象不是字符串。
如何让 raw_data 变量只包含块引号 [ ] 之间的文本?
编辑:这似乎有效。它避免了正则表达式并解决了尾随字符的问题。感谢您的建议。
url = "www.example.com"
html = urllib.request.urlopen(url)
soup = BeautifulSoup(html, "html.parser")
# get the script tag data and convert soup into a string
data = str(soup.find("script"))
# cut the <script> tag and some other things from the beginning and end to get valid JSON
cut = data[27:-13]
# load the data as a json dictionary
jsoned = json.loads(cut)
慕尼黑8549860
紫衣仙女
相关分类