如何使用python解析ld+json

wes*_*lls 9 python json web-scraping json-ld

我一直在尝试一些网页抓取,我在这个标签中发现了一些有趣的数据:

<script type="application/ld+json">
Run Code Online (Sandbox Code Playgroud)

我已经能够使用漂亮的汤来隔离那个标签

html = urlopen(url)
soup = BeautifulSoup(html, "lxml")

p = soup.find('script', {'type':'application/ld+json'})
print p
Run Code Online (Sandbox Code Playgroud)

但我无法处理数据或从该标签中提取任何数据。

如果我尝试使用正则表达式从中获取一些东西,我会得到:

TypeError: expected string or buffer
Run Code Online (Sandbox Code Playgroud)

如何从该脚本标记中获取数据并像使用字典或字符串一样使用它?顺便说一下,我正在使用 python 2.7。

Mar*_*ian 9

您应该阅读 JSONjson.loads以将其转换为字典。

import json

import requests
from bs4 import BeautifulSoup

def get_ld_json(url: str) -> dict:
    parser = "html.parser"
    req = requests.get(url)
    soup = BeautifulSoup(req.text, parser)
    return json.loads("".join(soup.find("script", {"type":"application/ld+json"}).contents))
Run Code Online (Sandbox Code Playgroud)

join/contents组合删除脚本标记。


Pav*_*T S 6

你应该阅读 html 来解析

html = urlopen(url).read()
soup = BeautifulSoup(html, "html.parser")
p = soup.find('script', {'type':'application/ld+json'})
print p.contents
Run Code Online (Sandbox Code Playgroud)