使用python脚本实现自动化下载后台报表,涉及到自动登录后台,并自动获取报表的查询字段来更新数据库对应table的表格下载。
后续功能:对下载的报表进行处理,比如对无用字段的清洗,表头删除等,最后导入mysql数据库。
思路:
1. 自动登录
通过抓包获取HTTPS的响应,使用requests库来提交登录信息,获取到登录后的token。
2. 查询字段
对本地数据库进行对应表格的查询,获取数据最后导入的时间,并在此时间基础上+1s作为报表下载的起始查询时间。需引入pymysql库。
3. 下载报表
依然使用requests进行请求,谷歌浏览器进行抓包,获取到对应报表下载的请求地址,字段,值的数据类型。
这里引入urllib库的parse,主要用于对字符串的url编码。毕竟通过url方式提交。
代码:
import json
import requests
import time
from urllib.parse import urlencode
import pymysql
def run_query(conn, query):
'''
:param conn: 数据库连接
:param query: str, query 语句
:return: tuple,查询结果
'''
cur = conn.cursor()
cur.execute(query)
conn.commit()
re = cur.fetchall()
cur.close()
conn.close()
return re
def get_start_time(query):
"""
获取查询的起始时间
:param query: str , 查询数据库最后更新的时间
:param file_name: 保存到本地的文件路径
:return: 时间戳,int
"""
conn = pymysql.connect(host='localhost', user='root', passwd='root', db='36', port=3306, charset='utf8')
start_time = run_query(conn, query)[0][0]
start_time = (time.mktime(time.strptime(start_time, "%Y-%m-%d %H:%M:%S")) + 1) * 1000
return start_time
def download_file(session,url_target, file_name, headers):
'''
如果连接ok,下载文件并命名
:param response: 响应体
:param file_name: 保存到本地的文件路径
:return:
'''
response = session.get(url_target, headers=headers)
if response.status_code == 200:
with open(file_name, 'wb') as file:
file.write(response.content)
print(file_name, "文件下载完成。")
else:
print('download fail!')
def run_mis_download():
login_url = "登录的url"
login_data = {
"username": "clay",
"password": "xxxxx",
'model': '-1',
'language': 'zh_CN'
}
session = requests.Session()
response = session.post(url=login_url, data=login_data) # 登录
token = json.loads(response.text)['result']['token'] # 获取token
# 再次获取新的token
data_check = {
'model': '9',
'language': 'zh_CN'
}
headers = {
"Authorization": token,
'Host': 'xxxx',
'Origin': 'xxxx',
'Referer': 'xxxx',
'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
check_url = 'xxxx' # 登录后由于有跳转,token有变化
menu_response = requests.post(check_url, headers=headers, data=data_check) # 二次获取token
new_token = json.loads(menu_response.text)['result']['token']
# 生成新的Headers
new_headers = {
"Authorization": new_token,
'Host': 'xxxxx',
'Origin': 'xxxxxx',
'Referer': 'xxxxxx',
'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'businessType': 'default'
}
url = 'xxxxxxx' # 下载报表的地址
# 下载N客追踪
query = "select max(开户时间) from yonghu"
# 获取报表筛选字段里的开始时间
start_time = get_start_time(query)
# 拼接报表查询字段
params = {'openStartTime': int(start_time), 'openEndTime': int(time.time() * 1000), 'userType': 'real', 'pageNum':'1','pageSize': '2147483647'}
# 保存的路径及名称
file_name_n = '../want_to_change/用户追踪.xls'
post_url = url + urlencode(params)
download_file(session, post_url, file_name_n, new_headers)
if __name__ == '__main__':
run_mis_download()
本文介绍如何使用Python脚本自动化下载后台报表,包括自动登录、获取查询字段更新数据库以及后续的报表处理。首先,通过抓包获取HTTPS响应并使用requests库登录。其次,查询数据库获取报表起始时间,并利用pymysql库进行数据交互。然后,使用requests和urllib.parse下载报表。最后,计划对下载的报表进行清洗和导入MySQL数据库。

1485

被折叠的 条评论
为什么被折叠?



