python爬取网页接口数据,以yearning为例

2024-09-05 22:44

本文主要是介绍python爬取网页接口数据,以yearning为例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

模拟登陆获取token,传token到对应的接口获取数据,下载到csv里面 

import getpass
import os
import requests
import time
import csv
from datetime import datetimeclass Yearning:def __init__(self):self.session = requests.Session()self.host = 'http://yearning.xxxx.com:8000'self.token_file = './token.txt'if not os.path.exists(self.token_file):open(self.token_file, 'w').close()file = open(self.token_file, 'r')token = file.read()file.close()self.authorization = ''if token:self.authorization = f'Bearer {token}'def query(self, database, source, sql, print_sql=False):if print_sql:print(sql)uri = f'{self.host}/api/v2/query/results'body = {'data_base': database,'source': source,'sql': sql}try:result_data = self.get_result_data(uri, body, False)if result_data and 'data' in result_data and result_data['data']:return result_data['data']return []except Exception as e:print(f'query exception! database={database}, source={source}, sql={sql}')print(e)return []def login(self, username, password):uri = f'{self.host}/ldap'headers = {'Content-Type': 'application/json; charset=UTF-8','cookie': '',}body = {'username': username,'password': password}try:result_data = self.get_result_data(uri, body, False)if result_data and 'token' in result_data:token = result_data['token']self.authorization = f'Bearer {token}'file = open(self.token_file, 'w')file.truncate()file.write(token)file.close()else:print(f'login fail!')except Exception as e:print(f'login error! e={e}')def get_result_data(self, uri, body, isGet):headers = {'Content-Type': 'application/json; charset=UTF-8','cookie': '','Authorization': self.authorization}if isGet:response = requests.get(uri, headers=headers)else:response = requests.post(uri, json=body, headers=headers)result_data = response.json()if result_data == 'missing or malformed jwt' or result_data == 'Token is expired' or result_data == '':print('登录授权已失效,请重新登录!')username = input('账号:')password = getpass.getpass('密码:')# 可以hardcode账号密码#username = ''#password = ''self.login(username, password)return self.get_result_data(uri, body, isGet)if 'code' in result_data and result_data['code'] == 1200 and 'payload' in result_data:return result_data['payload']else:print(f'其他异常,休眠1s!{result_data}')time.sleep(1)return Noneyearning = Yearning()def export():sql = "select   count(*), driver_id from   order_info group by driver_id"db = "order"source = "order_readonly"# 获取当前时间now = datetime.now()# 格式化时间为年月日时分秒字符串,例如:"2023-04-01 14:30:45"datetime_str = now.strftime("%Y%m%d%H%M%S")#windows的换行符是\r\n 会导致有空行,需要将换行符修改为\n,lineterminator='\n'save_file = csv.writer(open(f'res/data-{datetime_str}.csv', 'w'),lineterminator='\n')data_list = yearning.query(db, source, sql, True)data = data_list[0]key_list = [key for key in data]save_file.writerow(key_list)print(key_list)for data in data_list:list = [data[key].strip() for key in key_list]print(list)save_file.writerow(list)if __name__ == '__main__':export()

这篇关于python爬取网页接口数据,以yearning为例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140273

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1