插件窝 干货文章 如何用QWebEngineView解析网页请求中的JSON数据?

如何用QWebEngineView解析网页请求中的JSON数据?

JSON 拦截器 QWebEngineView QWebEngineUrlReq 216    来源:    2025-03-14

要使用 QWebEngineView 解析网页请求中的 JSON 数据,你可以通过拦截网络请求并提取其中的 JSON 数据。QWebEngineView 是 Qt 提供的一个用于显示网页内容的组件,而 QWebEngineProfileQWebEngineUrlRequestInterceptor 可以帮助你拦截和解析网络请求。

以下是一个简单的示例,展示如何实现这一功能:

1. 创建自定义的 QWebEngineUrlRequestInterceptor

首先,你需要创建一个自定义的 QWebEngineUrlRequestInterceptor 来拦截网络请求并提取 JSON 数据。

from PyQt5.QtWebEngineCore import QWebEngineUrlRequestInterceptor
from PyQt5.QtCore import QUrl

class MyRequestInterceptor(QWebEngineUrlRequestInterceptor):
    def interceptRequest(self, info):
        url = info.requestUrl().toString()
        if url.endswith('.json'):  # 假设你只对 JSON 文件感兴趣
            print(f"Intercepted JSON request: {url}")
            # 这里你可以进一步处理 JSON 数据

2. 设置 QWebEngineProfile 使用自定义的拦截器

接下来,你需要将自定义的拦截器设置到 QWebEngineProfile 中。

from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWebEngineCore import QWebEngineProfile
from PyQt5.QtWidgets import QApplication

app = QApplication([])

# 创建 QWebEngineView
view = QWebEngineView()

# 获取默认的 QWebEngineProfile
profile = QWebEngineProfile.defaultProfile()

# 创建并设置自定义的拦截器
interceptor = MyRequestInterceptor()
profile.setUrlRequestInterceptor(interceptor)

# 加载网页
view.load(QUrl("https://example.com"))
view.show()

app.exec_()

3. 解析 JSON 数据

interceptRequest 方法中,你可以使用 requests 或其他 HTTP 库来获取 JSON 数据并解析它。

import requests
import json

class MyRequestInterceptor(QWebEngineUrlRequestInterceptor):
    def interceptRequest(self, info):
        url = info.requestUrl().toString()
        if url.endswith('.json'):
            print(f"Intercepted JSON request: {url}")
            response = requests.get(url)
            if response.status_code == 200:
                json_data = response.json()
                print("Parsed JSON data:", json_data)

4. 运行程序

运行程序后,QWebEngineView 会加载指定的网页,并在拦截到 JSON 请求时打印出解析后的 JSON 数据。

注意事项

  • 这种方法适用于简单的场景,如果你需要处理复杂的网页请求或动态加载的内容,可能需要结合其他技术(如 JavaScript 注入)来实现。
  • 如果你需要处理大量的 JSON 数据或复杂的逻辑,建议将数据处理部分放在单独的线程中,以避免阻塞主线程。

通过这种方式,你可以在 QWebEngineView 中拦截并解析网页请求中的 JSON 数据。