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

