python下载后台报表

本文介绍如何使用Python脚本自动化下载后台报表,包括自动登录、获取查询字段更新数据库以及后续的报表处理。首先,通过抓包获取HTTPS响应并使用requests库登录。其次,查询数据库获取报表起始时间,并利用pymysql库进行数据交互。然后,使用requests和urllib.parse下载报表。最后,计划对下载的报表进行清洗和导入MySQL数据库。

使用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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值