質問者様がsoup.find("script")
で取り出しているのはjsonデータではなく
あくまでもjsonが表示される様になっているhtml上のソースであり
それを変数に代入したとしても、jsonデータとしては使用出来ません。
今一度、print(json_2, type(json_2))
と、json_2の中身をprintして確認してみると良いでしょう。
otnさんが回答している様に、bs4で取得したタグ要素である事がわかると思います。
print(json_2, type(json_2))
<script type="application/ld+json">
{
"url": "******",
"title": "*", "description":"*",
"Location": {
"place": "*", "address": { "type": "*",
"line1": "神奈川県",
"line2": "横浜市",
"line3": "磯子区",
"Country": "JP"
}
}
}
</script> <class 'bs4.element.Tag'>
その為、それらをjsonデータとして取り扱うには
まずは取り出したjson_2の文字列だけを取得し、辞書型に変換する必要があります。
python
1from bs4 import BeautifulSoup
2import json
3
4html = '''<script type="application/ld+json">
5{
6"url": "******",
7"title": "*", "description":"*",
8"Location": {
9"place": "*", "address": { "type": "*",
10"line1": "神奈川県",
11"line2": "横浜市",
12"line3": "磯子区",
13"Country": "JP"
14}
15}
16}
17</script>'''
18
19soup = BeautifulSoup(html, 'html.parser')
20json_2 = soup.find('script', {'type': 'application/ld+json'})
21data = json_2.text # 文字列を取得
22
23json_dict = json.loads(data) # 文字列をjsonとして辞書型で読み込む
24print(json_dict)