使用 Bearer 令牌从 API 请求数据

时间:2021-06-21 02:37:04

标签: python bearer-token

我仍然是网络抓取的初学者, 我正在尝试从 API 中提取数据,但问题是它有一个不记名令牌,并且此令牌在 5 到 6 小时后更改,因此我必须再次访问网页并再次复制令牌 那么有什么方法可以提取数据而无需再打开网页并再次复制令牌

import json
import pandas as pd
from time import sleep


def make_request():
    headers = {
        'Connection': 'keep-alive',
        'Pragma': 'no-cache',
        'Cache-Control': 'no-cache',
        'sec-ch-ua': '^\\^',
        'Accept': 'application/json',
        'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJMdXRiZlZRUVZhWlpmNTNJbGxhaXFDY3BCVTNyaGtqZiIsInN1YiI6MzEzMTcwLCJleHAiOjE2MjQzMjU2NDcsInJvbCI6ImRpc3BhdGNoZXIiLCJyb2xlcyI6WyJodXJyaWVyLmRpc3BhdGNoZXIiLCJjb2QuY29kX21hbmFnZXIiXSwibmFtIjoiRXNsYW0gWmVmdGF3eSIsImVtYSI6ImV6ZWZ0YXd5QHRhbGFiYXQuY29tIiwidXNlcm5hbWUiOiJlemVmdGF3eUB0YWxhYmF0LmNvbSIsImNvdW50cmllcyI6WyJrdyIsImJoIiwicWEiLCJhZSIsImVnIiwib20iLCJqbyIsInEyIiwiazMiXX0.XYykBij-jaiIS_2tdqKFIfYGfw0uS0rKmcOTSHor8Nk',
        'sec-ch-ua-mobile': '?0',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
        'Content-Type': 'application/json;charset=UTF-8',
        'Origin': 'url',
        'Sec-Fetch-Site': 'same-origin',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Dest': 'empty',
        'Referer': 'url',
        'Accept-Language': 'en-US,en;q=0.9,ar-EG;q=0.8,ar;q=0.7',
        'dnt': '1',
    }

    
    data = {
        'status': 'picked'
    }
    response = requests.post('url/api', headers=headers, json=data)
    print(response.text)

    return json.loads(response.text)


def extract_data(row):
    data_row = {
        'order_id': row['order']['code'],
        'deedline': row['order']['deadline'].split('.')[0],
        'picked_at': row['picked_at'].split('.')[0],
        'picked_by': row['picked_by'],
        'processed_at': row['processed_at'],
        'type': row['type']
    }
    return data_row



def periodique_extract(delay):
    extract_count = 0
    while True:
        extract_count += 1
        data = make_request()
        if extract_count == 1 :
            df = pd.DataFrame([extract_data(row) for row in data['data']])
            df.to_csv(r"C:\Users\di\Desktop\New folder\a.csv", mode='a')
        else:
            df = pd.DataFrame([extract_data(row) for row in data['data']])
            df.to_csv(r"C:\Users\di\Desktop\New folder\a.csv", mode='a',header=False)
        print('exracting data {} times'.format(extract_count))
        sleep(delay)


periodique_extract(60)

#note: as the website is track live operation so I extract data every 1 min

1 个答案:

答案 0 :(得分:0)

您能否详细说明令牌,它是每 5-6 小时更改一次还是过期?您的问题不清楚,您能否详细说明如何首先生成令牌?您的服务可能有 refresh_token,使用它来获取新令牌而无需返回您的网站。