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
相关产品推荐
相关产品推荐

