使用shareplum无法从_Folder对象获取自定义列数据的问询
核心原因
SharePlum的_Folder对象调用的是SharePoint的Folder API端点,仅返回基础文件/文件夹元数据;而List.get_list_items()调用的是List Items API端点,能拉取包括自定义列在内的完整字段集合。要在Folder层级获取完整数据,需要结合两者的能力。
两种可行方案
方案1:利用List接口+路径过滤(快速实现)
直接通过Documents列表的get_list_items()获取全量数据,再用文件夹路径过滤目标内容:
- 获取Documents列表对象
documents = site.List('Documents')
- 拉取包含自定义列的所有列表项(指定需要的字段,包括系统字段和自定义列)
# FileSystemObjectType用于区分:0=文件,1=文件夹 all_items = documents.get_list_items( fields=['ID', 'Title', 'FileDirRef', 'monkey', 'woohoo', 'FileSystemObjectType'] )
- 筛选目标文件夹下的内容
target_folder = "Shared Documents/Test_Library" folder_full_items = [ item for item in all_items if item['FileDirRef'].endswith(target_folder) ]
folder_full_items中会包含该文件夹下所有文件/文件夹的完整元数据(含自定义列)。
方案2:扩展_Folder类(面向对象封装)
给_Folder类添加自定义方法,直接通过Folder对象获取完整数据:
from shareplum import _Folder def get_full_metadata(self): # 获取当前Folder所属的List对象 parent_list = self.site.List(self.list_title) # 构造查询,过滤当前文件夹的所有项 query = { "Query": { "Where": { "Eq": { "FieldRef": {"Name": "FileDirRef"}, "Value": {"Type": "Text", "Value": self.serverRelativeUrl} } } } } # 返回包含自定义列的完整数据 return parent_list.get_list_items( query=query, fields=['ID', 'Title', 'monkey', 'woohoo', 'FileSystemObjectType'] ) # 给_Folder类动态添加方法 _Folder.get_full_metadata = get_full_metadata
使用时直接调用:
folder = site.Folder("Shared Documents/Test_Library") full_metadata = folder.get_full_metadata()
爬虫搭建建议
- 先用
_Folder的folders属性递归遍历站点所有文件夹路径,构建完整的目录结构 - 对每个文件夹路径,用上述方案获取对应的完整元数据(文件+文件夹)
- 处理大型列表时,给
get_list_items()添加分页参数(rowlimit和query的分页逻辑),避免一次性拉取过多数据
内容的提问来源于stack exchange,提问作者Pablo_le_Vicieux
相关产品推荐
相关产品推荐

