如何使用 python 解析 ld+json
Posted
技术标签:
【中文标题】如何使用 python 解析 ld+json【英文标题】:How to parse ld+json using python 【发布时间】:2017-09-25 02:16:10 【问题描述】:我一直在尝试一些网页抓取,我发现了一些位于该标签内的有趣数据:
<script type="application/ld+json">
我已经能够用漂亮的汤隔离那个标签
html = urlopen(url)
soup = BeautifulSoup(html, "lxml")
p = soup.find('script', 'type':'application/ld+json')
print p
但我无法处理数据或从该标签中提取任何数据。
如果我尝试使用正则表达式从中获取一些东西,我会得到:
TypeError: expected string or buffer
如何从该脚本标签中获取数据并像使用字典或字符串一样使用它?顺便说一句,我使用的是 python 2.7。
【问题讨论】:
【参考方案1】:您应该使用json.loads
读取 JSON 以将其转换为字典。
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))
join
/ contents
组合删除脚本标签。
【讨论】:
【参考方案2】:你应该阅读要解析的html
html = urlopen(url).read()
soup = BeautifulSoup(html, "html.parser")
p = soup.find('script', 'type':'application/ld+json')
print p.contents
【讨论】:
我从“html/read()”中收到一条错误消息)它说: Traceback(最近一次调用最后一次):文件“test.py”,第 20 行,在上面的 cmets 没有帮助(不过谢谢)
最后我用了:
p = str(soup.find('script', 'type':'application/ld+json'))
我将它强制转换为一个不太漂亮的字符串,但它完成了工作。我知道那里可能有更好的方法,但这对我有用。
【讨论】:
以上是关于如何使用 python 解析 ld+json的主要内容,如果未能解决你的问题,请参考以下文章
如何使用JSON-LD创建SiteNavigationElement?
如何使用 C# 在 ASP.NET 3.5 中动态设置“application/ld+json”Schema.org 元数据