python爬虫系列之下载在线文档Excel(腾讯)
一、简介
本文讲述使用python下载腾讯文档中的Excel数据。
- 思路
腾讯文档导出流程如下
使用抓包工具获取导出接口,检测数据是否准备完成接口、下载excel接口,使用requests进行调用,即可完成下载
二、实现步骤
1. 数据准备
-
提供腾讯文档中excel文档地址,以便进行下载,首先需要进行登陆,获取excel文档地址 获取文档localPadId,每份文档唯一。打开浏览器控制台,刷新页面,filter中输入doc_info,找到该请求的localPadId local_pad_id = 300000000$TfQWCVvRALvN cookie值获取,右键复制即可 cookie_value = ********
2. 获取当前用户nowUserIndex
用户nowUserIndex字段为后续下载excel文件接口的u字段,这里通过调用接口document_url获取
def get_now_user_index(self):
"""
# 获取当前用户信息,供创建下载任务使用
:return:
# nowUserIndex = 4883730fe8b94fbdb94da26a9a63b688
# uid = 144115225804776585
# utype = wx
"""
response_body = requests.get(url=self.document_url, headers=self.headers, verify=False)
parser = BeautifulSoup(response_body.content, html.parser)
global_multi_user_list = re.findall(re.compile(window.global_multi_user=(.*?);), str(parser))
if global_multi_user_list:
user_dict = json.loads(global_multi_user_list[0])
print(user_dict)
return user_dict[nowUserIndex]
return cookie过期,请重新输入
3.创建导出任务
def export_excel_task(self, export_excel_url):
"""
导出excel文件任务,供查询文件数据准备进度
:return:
"""
body = {
docId: self.localPadId, version: 2
}
res = requests.post(url=export_excel_url,
headers=self.headers, data=body, verify=False)
operation_id = res.json()[operationId]
return operation_id
4. 检查数据准备进度,并下载
def download_excel(self, check_progress_url, file_name):
"""
下载excel文件
:return:
"""
# 拿到下载excel文件的url
start_time = time.time()
file_url =
while True:
res = requests.get(url=check_progress_url, headers=self.headers, verify=False)
progress = res.json()[progress]
if progress == 100:
file_url = res.json()[file_url]
break
elif time.time() - start_time > 30:
print("数据准备超时,请排查")
break
if file_url:
self.headers[content-type] = application/octet-stream
res = requests.get(url=file_url, headers=self.headers, verify=False)
with open(file_name, wb) as f:
f.write(res.content)
print(下载成功,文件名: + file_name)
else:
print("下载文件地址获取失败, 下载excel文件不成功")
三、完整代码
四、效果演示
成功下载的文档如下所示
下一篇:
数据结构 简单选择排序(C语言实现)
