1.1.6 Python-数据获取-requests-腾讯文档数据抓取
共享文档是工作中常用的工具,其中腾讯文档的共享表格,是很多人都在用的。 有些表格,经常需要获取上面的数据信息,每次都打开链接导出表格很麻烦。
这时python爬虫脚本可以提高你的工作效率,结合任务计划程序来定时的获取数据到本地表格,之后还可以通过企业微信机器人发送到特定群组中。
在
1.1.2 Python-数据获取-requests爬虫
中,介绍了如何使用python爬虫
本文将介绍其应用,有效的提高工作效率
1. 腾讯文档表格抓取函数
1.1 函数说明
示例腾讯文档链接
https://docs.qq.com/sheet/DRXpPcW10Q1p4bFBE?tab=BB08J2&u=f754a513e0104b3cbffa015b5b6f074c
加粗部分就是函数的两个参数
table_id = DRXpPcW10Q1p4bFBE
sheet_id = BB08J2
注意1:仅支持读取不含公式的表格,并且表格中无空值
注意2:腾讯文档的权限,至少需要有所有人可查看的权限
1.2 函数
def docqqAPI(table_id,sheet_id = None):
作者:AnalyZL(github:https://github.com/analy-liu)
import time
import pandas as pd
import requests
import json
if sheet_id == None:
sheet_id = 'BB08J2'
headers = {'referer':"https://docs.qq.com/sheet/{}?tab={}".format(table_id,sheet_id),
'authority' : "docs.qq.com",
'accept' : "*/*"}
success = 0
num = 0
while success == 0:
try:
# 获取腾讯文档信息
r = requests.get('https://docs.qq.com/dop-api/opendoc?tab={}&id={}&outformat=1&normal=1'.format(sheet_id,table_id),headers=headers)
text = json.loads(r.text)
text = text['clientVars']['collab_client_vars']
text_keys = list(text['initialAttributedText']['text'][0][-1][0]['c'][1].keys())
doc = text['initialAttributedText']['text'][0][-1][0]['c'][1].values()
doc = pd.DataFrame(doc)["2"]
doc = doc.dropna()
# 获取最大列数
try:
maxCol = 0
while text_keys[maxCol]==str(maxCol):
maxCol+=1
text_keys[maxCol]
except:
maxCol = 0
while True:
try:
doc[maxCol]
maxCol+=1
except:
break
if len(doc) == maxCol:
maxCol = text['maxCol']
doc = doc.reset_index(drop=True)
# 生成DataFrame
data = []
temp = []
for i in range(len(doc)):
try:
temp.append(doc[i][1])
except:
temp.append(doc[i])
if (i)%maxCol == maxCol-1:
data.append(temp)
temp = []
doc = pd.DataFrame(data = data[1:],columns=data[0])
doc = doc.loc[:,[x for x in doc.columns if not pd.isnull(x)]]
success = 1
except:
time.sleep(1)
num += 1