正确的 Python Code ___Crawl4ai 节点脚本

这次的方案不再依赖任何需要从外部安装的第三方库,而是完全使用了 n8n 的 Python (Pyodide) 环境内置的、专门为此设计的工具。它绕开了所有关于操作系统权限和模块缺失的限制。

请将 Code 节点中的代码完整替换为以下内容:

Python

# 这是在 Pyodide 环境中进行网络请求的正确方法
import json
# 1. 导入 Pyodide 内置的 http 模块
import pyodide.http

# 2. 定义 API 请求所需的所有参数
api_url = 'https://name-crawl4ai.hf.space/crawl_sync'
api_token = 'Your token'
target_urls = ['https://example.com/']

# 3. 构建请求头 (Headers) 和请求体 (Payload)
headers = {
    'accept': 'application/json',
    'Authorization': f'Bearer {api_token}',
    'Content-Type': 'application/json'
}
payload = {
    "urls": target_urls
}

# 4. 使用 pyodide.http.pyfetch 发送请求
# 这是一个异步函数, 所以我们必须在它前面加上 await
print("正在使用 Pyodide 内置的 pyfetch 发送 API 请求...")
try:
    response = await pyodide.http.pyfetch(
        api_url,
        method='POST',
        headers=headers,
        # pyfetch 的 body 参数需要一个字符串, 所以我们用 json.dumps 转换
        body=json.dumps(payload) 
    )

    # 5. 检查响应是否成功
    if not response.ok:
        # 异步获取错误文本
        error_text = await response.string()
        raise Exception(f"HTTP 错误! 状态码: {response.status}, 详情: {error_text}")

    print("API 请求成功,已获取数据。")

    # 6. 异步获取并解析 JSON 数据
    data = await response.json()

    # 7. 按照 n8n 的格式要求返回数据
    return [{"json": data}]

except Exception as e:
    print(f"请求失败: {e}")
    raise e

关键改动解读

  • import pyodide.http: 我们导入的是 Pyodide 环境特有的模块。

  • await pyodide.http.pyfetch(...): 我们使用了 pyfetch 函数来发送请求。注意它是一个异步函数,所以前面必须加 await

  • body=json.dumps(payload): pyfetchbody 参数需要字符串,所以我们用 json.dumps() 手动将字典转换为 JSON 字符串。

  • await response.json(): 获取返回内容同样需要 await

这个方案从根本上解决了您 n8n 环境的特殊性所带来的所有问题。