正确的 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)
:pyfetch
的body
参数需要字符串,所以我们用json.dumps()
手动将字典转换为 JSON 字符串。await response.json()
: 获取返回内容同样需要await
。
这个方案从根本上解决了您 n8n 环境的特殊性所带来的所有问题。