使用BeautifulSoup在脚本标签内解析json文本

时间:2018-10-01 15:18:35

标签: python json web-scraping beautifulsoup findall

我正在尝试使用BeautifulSoup提取Python3中(@context)的'script', type='application/ld+json'元素中的文本。

我在一页内有多个脚本,我想获取上面json中列出的特定功能。

我尝试使用此代码:

data = soup.find_all('script', type='application/ld+json')
print(data)

这为我提供了所有脚本的完整摘录内容,但我想在每个脚本的上下文中获得特定功能。

功能示例:

{"name":"test","telephone":"600.212.0000","url":"https://test.com/test"}

在此示例中,我想获得"url"部分。

有人知道要用Python做吗?

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

由于您的功能是字典,因此您可以尝试以下操作:

feature = {"name":"test","telephone":"600.212.0000","url":"https://test.com/test"}
print(feature["url"])

答案 1 :(得分:0)

您可以对get()使用列表推导:

data = soup.find_all('script', type='application/ld+json')

urls = [i.get('url') for i in data]

答案 2 :(得分:0)

其他答案中缺少的是将从 script 标签中提取的内容转换为 JSON(我们可以使用 json 库),然后只需从 dict 中选择我们感兴趣的字段。

import requests, json
from bs4 import BeautifulSoup

src = requests.get("YOUR_URL").content
soup = BeautifulSoup(src,'html.parser')
res = soup.find('script', type='application/ld+json')

json_object = json.loads(res.contents[0])
print(json_object['url'])