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

Python加载SharePoint列表数据存入DataFrame报403错误如何解决

报错根因
  • 认证方式不匹配:你访问的是SharePoint Online(域名后缀为-my.sharepoint.com属于微软365托管的个人站点),不支持NTLM协议认证,HttpNtlmAuth仅适用于本地部署的SharePoint Server,用它调用SPO接口会直接返回403禁止访问。
  • 传入接口的URL格式错误:shareplum的Site类要求传入站点根路径,你当前传入的是列表的视图详情页(带/Lists/MySamplelist/AllItems.aspx段),路径不匹配也会触发权限类报错。
修复步骤
  • 修正站点URL:截取到个人站点根路径即可,不要带列表后缀,正确根路径格式为https://xxxxx-my.sharepoint.com/personal/account@******.com/
  • 替换认证方式:使用shareplum内置的Office365认证类,不要用requests_ntlm的NTLM认证
  • 如果你的账号开启了多因素认证(MFA),需要先在微软365安全中心生成应用专用密码,用该密码替代原账号登录密码,否则账号密码校验会失败。
可直接运行的参考代码
import pandas as pd
from shareplum import Site
from shareplum import Office365  # 引入SPO专用认证类

# 注意这里填站点根路径,不是列表页地址
site_url = 'https://xxxxx-my.sharepoint.com/personal/account@******.com/'
list_name = 'MySamplelist'  # 单独填写列表名
username = 'account@*****.com'
password = 'pwd'  # 开了MFA就填应用专用密码

# 获取认证cookie
authcookie = Office365(site_url, username=username, password=password).GetCookies()
# 初始化站点对象,传入认证cookie
site = Site(site_url, authcookie=authcookie, verify_ssl=True)
# 定位到目标列表
sp_list = site.List(list_name)
# 获取列表所有数据
list_data = sp_list.GetListItems()
# 转成pandas DataFrame
df = pd.DataFrame(list_data)

# 后续可直接对df做数据处理
print(df.head())
额外排查点

如果改完代码还是报403,检查两项配置:

  • 进入SharePoint列表的「设置-列表权限」页面,确认当前登录账号至少拥有列表的读取权限
  • 确认站点URL没有拼写错误,个人站点路径里的账号域名要和你登录用的账号完全一致,不要漏写或者错写域名后缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:24:16