You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup上传HTML到Confluence报JSON序列化错误如何解决

问题原因

你调用confluence.create_page时传入的body参数是BeautifulSoup类的实例对象,而Confluence的Python SDK要求body参数为可序列化的字符串类型,SDK底层会把请求参数转成JSON发送,BeautifulSoup对象没有默认的JSON序列化规则,所以触发了该报错。

同时你的现有代码还有两处语法问题:

  • with open("sample.html", 'r')as f末尾缺少半角冒号
  • 缺少BeautifulSoup的导入语句
修复方案

方案1:无需处理HTML时直接传入原始HTML文本

如果你不需要对读取的HTML做额外的节点修改、过滤操作,完全不需要调用BeautifulSoup解析,直接把读取到的文件内容传给body参数即可:

import yaml
from atlassian import Confluence
import urllib, mimetypes
import requests
import codecs,json
from bs4 import BeautifulSoup

confluence = Confluence(
    url='https://confluence.com',
    username='12344',
    password='abcd')

####读取HTML文件,补全冒号
with open("sample.html", 'r') as f:
    content = f.read()

# 直接传原始HTML字符串即可
status = confluence.create_page(
    'ABCD', #空间标识
    'Report', #页面标题
    content, #页面内容
    parent_id=123456, #父页面ID
    type='page',
    representation='storage',
    editor='v2'
)

print(status)

方案2:需要用BeautifulSoup处理HTML时,转成字符串再传入

如果你需要用BeautifulSoup修改、过滤HTML节点,处理完成后调用str(soup)或者soup.prettify()转成字符串再传给body参数:

# 前面的初始化、读取文件代码保持不变
soup = BeautifulSoup(content, 'html.parser')

# 此处可添加你的HTML处理逻辑,比如删除无效标签、修改节点内容等
# 示例:删除所有script标签
# for tag in soup.find_all("script"):
#     tag.decompose()

# 转成字符串后传入
status = confluence.create_page(
    'ABCD',
    'Report',
    str(soup), # 也可以用soup.prettify()输出格式化后的HTML
    parent_id=123456,
    type='page',
    representation='storage',
    editor='v2'
)
补充注意事项

Confluence的存储格式支持大部分标准HTML标签,但部分特殊标签、自定义标签可能会被自动过滤,如果上传后发现部分内容丢失,可以先将HTML转成Confluence标准的XHTML存储格式再上传。

内容的提问来源于stack exchange,提问作者Y2Jepic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:36:04