使用 ChatGPT 简化 Web 抓取中的 JSON 解析


网络爬虫可以从网站中提取大量的 json 数据,但通常需要进行数据解析和清理。虽然数据解析是网络抓取过程中的重要步骤,但处理大型 JSON 数据集时可能会遇到挑战。

像 JMESPath 这样的 JSON 解析语言使用路径语法来过滤和重塑 JSON 数据集,但需要大量的手动操作。在本文中,我们将介绍如何使用 chatgpt 生成 JMESPath 查询。

通过使用 ChatGPT,我们可以轻松获取 JMESPath 选择器并优化 JSON 数据。让我们深入了解细节!

什么是 JMESPath?

JMESPath 是一种用于搜索 JSON 文档的查询语言。它允许创建查询,从 JSON 数据集中过滤和提取特定的数据字段。在某种程度上,JMESPath 与 XPath 或 CSS 选择器 非常相似,但用于 JSON 数据。

使用 Python 解析 JSON 的快速介绍

请参阅我们完整的 JMespath 介绍,其中涵盖了关于这种小型路径语言的所有知识,并探索一个网络抓取示例

在本文中,我们不需要自己理解或实现 JMESPath 选择器。相反,我们将使用 ChatGPT 解析 JSON,以获取我们可以在 Python 或任何其他支持 JMespath 的语言中使用的 JMESPath 查询。

这种方法类似于我们之前介绍的 使用 ChatGPT 查找 XPath 和 CSS 选择器。不过这次,我们将使用 ChatGPT 解释 JSON 来生成 JMESPath 查询。

使用 ChatGPT 解析 JSON

当使用不支持 JavaScript(如 BeautifulSoup)的网络爬虫时,我们可能无法在页面上找到由 JavaScript 渲染的数据。这种类型的数据称为隐藏的网络数据,通常很混乱,并包含元字段和其他无用的数据键。这就是我们使用 ChatGPT 解析 JSON 的地方,以获取清理和优化 JSON 数据集的 JMESPath 查询。

我们可以通过以下两种方式来进行 chatgpt JSON 解析:

  1. 使用代码解释器功能创建 chatgpt 网络爬虫。
    这通过通过代码功能上传 HTML 文件来实现。ChatGPT 将解析文件中的 JSON 数据并返回清理后的 JSON 数据。
  2. 将 JSON 文档作为文本传递给聊天提示。
    这通过将 HTML 片段传递给聊天提示来实现。不幸的是,由于字符限制,我们通常无法传递整个 HTML 页面,但我们可以传递包含 JSON 数据的 HTML script 标签。ChatGPT 将返回相应的 JMESPath 查询,指向特定的数据字段。

在本教程中,我们将涵盖 ChatGPT JSON 解析的两种方法。但在此之前,让我们先看一下我们的目标网站。

设置

在本示例中,我们将使用 IMDB 上 Oppenhimmer 的页面。

要使用 ChatGPT 解析此页面上的 JSON,我们需要安装 JMESPath 和其他库。使用以下命令进行安装:

pip install jmespath httpx parsel

我们将使用 httpx 发送请求,parsel 选择 HTML 脚本标签,jesmpath 选择 JSON 文档中的元素。

提取 HTML 示例

由于我们将以两种不同的方式使用 chatgpt 解析 JSON,我们需要保存 HTML 页面并提取 JSON 数据。

让我们从 HTML 页面的 script 标签中提取 JSON 数据开始。按下 (F12) 键打开浏览器的开发者工具。然后复制具有类型 application/ld+json 的脚本标签:

🙋‍在提取示例数据时要注意 chatGPT 的字符限制

要使用 代码解释器功能 解析 JSON,我们可以保存整个 HTML 页面。要做到这一点,只需在浏览器中按 (CTRL + s)。

使用 ChatGPT 聊天提示解析 JSON

让我们从 chatgpt 聊天提示开始解析 JSON。我们将传递之前复制的脚本标签,并要求 ChatGPT 解析 JSON。ChatGPT 将返回指向 JSON 文档中数据的 JMESPath 查询:

你能使用 JMESPath 和 Python 清理此 JSON 数据集并将其重构为扁平结构吗?
<在此处添加 JSON 数据集>

ChatGPT 应该会回复一个完整的 JMESPath 脚本,其中定义了 JMESPath 查询和执行代码:

ChatGPT 返回了 JSON 文档中数据的 JMESPath 查询。它还创建了一个基本的 Python 代码,用于直接从 JSON 文本中抓取这些数据。让我们编辑代码,使其从目标网站上抓取数据。

首先,我们需要向目标网站发送请求并捕获页面的 HTML:

import json
import httpx
import jmespath
from parsel import Selector

# 建立 HTTP 客户端,并设置一些类似浏览器的标头,以防止被立即封禁
session = httpx.Client(
    headers={
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
        "A***ept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "A***ept-Language": "en-US,en;q=0.9",
        "A***ept-Encoding": "gzip, deflate, br",
    },
)

# 发送请求到目标网站
request = session.get(
    "https://www.imdb.***/title/tt15398776/"
)

现在我们有了请求对象,我们将使用 Parsel 将 HTML 包装成选择器。这样我们就可以使用 CSS 选择器从 HTML 中捕获 JSON 数据。以下是具体步骤:

selector = Selector(text=request.text)

# 从脚本标签中获取 JSON 对象
json_data = selector.css("script[type='application/ld+json']::text").get()

接下来,让我们添加之前获取的 chatGPT 代码:

# 加载 JSON 数据
data = json.loads(json_data)

# JMESPath 表达式
expression = jmespath.***pile(
    """
    {
      "name": name,
      "url": url,
      "description": description,
      "review_author": review.author.name,
      "review_date": review.dateCreated,
      "review_text": review.reviewBody,
      "review_rating": review.reviewRating.ratingValue,
      "aggregate_rating": aggregateRating.ratingValue,
      "content_rating": contentRating,
      "genre": genre,
      "date_published": datePublished,
      "actors": actor[].name,
      "director": director[].name,
      "duration": duration
    }
    """
)

# 应用 JMESPath 表达式
flat_data = expression.search(data)

# 打印重构后的数据
print(json.dumps(flat_data, indent=2))

在这里,我们将获取的 JSON 数据转换为 Python 对象,并创建 JMESPath 表达式。然后,我们使用这些表达式在数据对象中进行搜索。以下是运行代码后得到的结果:

{
  "name": "Oppenheimer",
  "url": "https://www.imdb.***/title/tt15398776/",
  "description": "The story of American scientist, J. Robert Oppenheimer, and his role in the development of the atomic bomb.",
  "review_author": "Dvir971",
  "review_date": "2023-07-19",
  "review_text": "Oppenheimer might be the best film I watched in a long, long time.\n\nVery different than Nolan&apos;s recent films, especially the Sci-Fi ones, but shows that Nolan can master the Biopic/Drama genre just as well as he can any other genre he tried to tackle yet.\n\nThe film is 3-hours long but goes through very quickly and enjoyably. Without spoiling anything, the film presents important and very relevant subjects, and doing so while being non-stop entertainment and a ***prehensive character study and a study of our society on a very high pace.\n\nWithout mentioning anything specific, there was one scene that caused almost every single person in the theatre to move nervously in the seats, non-stop for a long period of time, being one of the most intense scenes I ever watched in a movie and reminding me of the true power of the cinematic experience like no other movie did in recent years.\n\nThe year is only half-way through but right now this is my top pick for the up***ing awards season. Picture, Writing, Directing, Acting, Score-- Oppenheimer is a winner on all fronts. A rare feat for filmmaking and a salient reminder that cinema is not dead.\n\nI highly re***mend this film to everyone. Watched it once already, and going back to the theatre for at least a few more times soon.",
  "review_rating": 10,
  "aggregate_rating": 8.6,
  "content_rating": "R",
  "genre": [
    "Biography",
    "Drama",
    "History"
  ],
  "date_published": "2023-07-21",
  "actors": [
    "Cillian Murphy",
    "Emily Blunt",
    "Matt Damon"
  ],
  "director": [
    "Christopher Nolan"
  ],
  "duration": "PT3H"
}

总之,ChatGPT 解析了脚本标签中的 JSON 数据,并返回了在 JSON 文档中找到有用数据的 JMESPath 查询。然后,我们创建了一个网络爬虫,使用这些查询从网页中抓取这些数据。

使用 ChatGPT 代码解释器功能解析 JSON

🙋‍ 请注意,代码解释器功能仅适用于 GPT-4 用户。您可以通过点击 GPT-4 模型并选择代码解释器功能来激活它。

我们只需上传之前保存的 HTML 文件,并要求 ChatGPT 解析文件中的 JSON 数据:

首先,ChatGPT 解析了 HTML 页面,找到包含 JSON 数据的 script 标签。然后,它解析了 HTML script 标签并返回了 JSON 数据:

输出数据

我们可以看到,通过使用 ChatGPT 代码解释器功能解析 JSON,我们获得了更好的结果。这是因为代码解释器使用了更先进的 GPT-4 模型技术。

常见问题

为了总结本文,让我们看一下关于 chatgpt json 解析的一些常见问题。

什么是 JMESPath?

JMESPath 是用于查询 JSON 文档的路径语言工具。它在所有主要编程语言中都有实现,使其在任何网络爬虫中都很容易访问。由于其易于访问的数据集重塑功能,它经常用于网络爬取。

ChatGPT 聊天提示和代码解释器功能有什么区别?

这两种方法都可以在 HTML 和 JSON 解析中极大地帮助网络爬虫开发。通过使用代码解释器功能,可以让 AI 解析 HTML 文档以获取真实数据字段。如果没有代码解释器,只能解析较小的 HTML 文档,而 GPT 的输出精度较低。

ChatGPT 能够爬取隐藏的 JSON 数据吗?

是的,通过将 HTML 代码传递给聊天提示,您可以让 ChatGPT 解析 HTML 并在 script 标签或 JavaScript 变量中找到隐藏的 JSON 数据。

ChatGPT JSON 解析总结

在本文中,我们解释了如何使用 ChatGPT 解析 JSON。这种方法是通过向 AI 提供页面示例并要求其提供解析指令来实现的。在我们的示例中,我们要求它使用 JMESPath 从一个 IMDB 页面解析 JSON 数据。

AI 网站爬虫正变得越来越可行,虽然当前技术过于资源密集而无法实现,但作为本文所示的教育工具,它是一个很好的选择!

转载请说明出处内容投诉
CSS教程_站长资源网 » 使用 ChatGPT 简化 Web 抓取中的 JSON 解析

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买