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

Jupyter Notebook中Python连接Tableau Server报错求解决方案

解决Tableau Server连接时的Expat error和NonXMLResponseError问题

在Jupyter Notebook中运行以下代码连接Tableau Server时,出现Expat error和NonXMLResponseError错误:

!pip install tableauserverclient
!pip install -U requests[security]
import requests
tableau_auth=TSC.TableauAuth('MAKPythonTab','xPK2QpkVTVegTv3PNQXB4w==:10S2NeLO4bkFB2iaZQJ8tKVEpTjINotG',site_id='home')
server=TSC.Server('https://tableau-it.homedepot.com',use_server_version=False)
requests.get('https://tableau-it.homedepot.com', verify=False)
server.add_http_options({'verify':False})
with server.auth.sign_in(tableau_auth):
    all_datasources,pagination_item=server.datasources.get()
    datasource_ids=[datasource.id for datasource in all_datasources]
    print("\nThere are {} datasources on site".format(len(all_datasources)))
    for i in datasource_ids:
        if file_download.lower().endswith('.tdsx'):
            file_download =server.datasources.download(id)
            print(file_download)
server.auth.sign_out()

修复后的完整代码

# 安装依赖
!pip install tableauserverclient
!pip install -U requests[security]

# 导入必要模块
import tableauserverclient as TSC
import requests

# 用个人访问令牌认证(匹配你的token格式)
tableau_auth = TSC.PersonalAccessTokenAuth(
    token_name='MAKPythonTab',
    token_value='xPK2QpkVTVegTv3PNQXB4w==:10S2NeLO4bkFB2iaZQJ8tKVEpTjINotG',
    site_id='home'
)

# 初始化Server并自动适配版本
server = TSC.Server('https://tableau-it.homedepot.com')
server.use_server_version()  # 自动检测服务器版本,避免格式不兼容

# 禁用SSL验证(仅测试环境使用,生产环境建议配置合法证书)
server.add_http_options({'verify': False})

with server.auth.sign_in(tableau_auth):
    # 获取所有数据源
    all_datasources, pagination_item = server.datasources.get()
    print(f"\nThere are {len(all_datasources)} datasources on site")
    
    # 遍历并下载TDSX格式数据源
    for datasource in all_datasources:
        if datasource.file_extension.lower() == 'tdsx':
            download_path = server.datasources.download(datasource.id)
            print(f"Downloaded datasource to: {download_path}")

# with块结束后自动登出,无需手动调用sign_out

关键修复点说明

  • 补全缺失模块导入:原代码未导入tableauserverclient(别名TSC),导致核心对象未定义,这是基础运行错误。
  • 修正认证方式:你的凭证格式是个人访问令牌(带冒号的token),需改用PersonalAccessTokenAuth类,而非普通密码登录的TableauAuth,这是触发非XML响应错误的核心原因。
  • 版本兼容性处理:移除use_server_version=False,改用server.use_server_version()自动检测服务器版本,版本不匹配会导致API响应格式异常,触发Expat解析错误。
  • 修复变量与循环错误:原代码中file_download未定义就使用,循环内的id应为当前数据源的id(直接遍历数据源对象更直观)。
  • 移除冗余操作:单独的requests.get调用无意义,TSC内部会处理连接逻辑;with块结束后会自动执行登出,无需手动调用sign_out。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:10:30