102 lines
5.1 KiB
Python
102 lines
5.1 KiB
Python
import requests
|
|
import pandas as pd
|
|
import time
|
|
from tqdm import tqdm
|
|
|
|
cookies = {
|
|
'memberSESSIONID': '485a36b9-eb05-4f25-806c-ddea074cb6a2',
|
|
'erpLanguage': 'zh-CN',
|
|
'tmall': 'false',
|
|
'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1775553704,1775799422,1776043595,1776153876',
|
|
'HMACCOUNT': 'A6A0585E8C70051D',
|
|
'prodOrg': '11240984669918128522',
|
|
'unp': '15851362811188895763',
|
|
'un': '15851362811188895763',
|
|
'_up': '-NillNN-qyBEJ--t3vnSknvoOF53yPCOts8N0no-Uu9VX_TGoZrQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_UQqY4i0wEO9vFRv-ZNHu3M-GTc1p2wFnGqpuxUiOMSmF_GORVsrEj9nR66kMm3MhA.',
|
|
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2215851362811188895763%22%2C%22first_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%7D',
|
|
'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1776405066',
|
|
}
|
|
|
|
headers = {
|
|
'accept': 'application/json, text/plain, */*',
|
|
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
|
'content-type': 'application/json;charset=UTF-8',
|
|
'origin': 'https://yunxiu.f6car.cn',
|
|
'priority': 'u=1, i',
|
|
'referer': 'https://yunxiu.f6car.cn/erp/view/index.html',
|
|
'sec-ch-ua': '"Microsoft Edge";v="147", "Not.A/Brand";v="8", "Chromium";v="147"',
|
|
'sec-ch-ua-mobile': '?0',
|
|
'sec-ch-ua-platform': '"Windows"',
|
|
'sec-fetch-dest': 'empty',
|
|
'sec-fetch-mode': 'cors',
|
|
'sec-fetch-site': 'same-origin',
|
|
'traceparent': '00-83110f5326614e2db80da5c48ab36d5d-ce4bdbb226a3286a-01',
|
|
'tracestate': 'rum=v2&browser&dz2uw0c5ay@e5930ea8eb782ae&9134c88bc6224ae4a4167c07dc0ad82e&uid_nli6u6uor4pqvx0f',
|
|
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0',
|
|
'x-requested-with': 'XMLHttpRequest',
|
|
# 'cookie': 'memberSESSIONID=485a36b9-eb05-4f25-806c-ddea074cb6a2; erpLanguage=zh-CN; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1775553704,1775799422,1776043595,1776153876; HMACCOUNT=A6A0585E8C70051D; prodOrg=11240984669918128522; unp=15851362811188895763; un=15851362811188895763; _up=-NillNN-qyBEJ--t3vnSknvoOF53yPCOts8N0no-Uu9VX_TGoZrQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_UQqY4i0wEO9vFRv-ZNHu3M-GTc1p2wFnGqpuxUiOMSmF_GORVsrEj9nR66kMm3MhA.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215851362811188895763%22%2C%22first_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%7D; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1776405066',
|
|
}
|
|
|
|
url = 'https://yunxiu.f6car.cn/member/car/carListForPermission'
|
|
|
|
source_excel_path = r"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\文件输出\车辆信息.xlsx"
|
|
source_sheet_name = "Sheet3"
|
|
output_path = r"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\文件输出\车辆信息_按车牌导出.xlsx"
|
|
|
|
df = pd.read_excel(source_excel_path, sheet_name=source_sheet_name)
|
|
all_data = []
|
|
|
|
for _, row in tqdm(df.iterrows(), total=len(df)):
|
|
car_number = str(row.get('车牌号', '')).strip()
|
|
if not car_number or car_number.lower() == 'nan':
|
|
continue
|
|
|
|
page_no = 1
|
|
matched = False
|
|
while True:
|
|
json_data = {
|
|
'keyWord': car_number,
|
|
'pageSize': 100,
|
|
'pageNo': page_no,
|
|
}
|
|
|
|
response = requests.post(
|
|
url,
|
|
cookies=cookies,
|
|
headers=headers,
|
|
json=json_data,
|
|
timeout=30,
|
|
)
|
|
data = response.json()
|
|
data_block = (data.get('data') or {})
|
|
items = (data_block.get('data') or [])
|
|
|
|
for item in items:
|
|
tm_car = item.get('tmCarInfo') or {}
|
|
tm_customer = item.get('tmCustomerInfo') or {}
|
|
current_car_number = f"{tm_car.get('carPrefix', '')}{tm_car.get('carNo', '')}"
|
|
if current_car_number == car_number:
|
|
car_id = tm_car.get('pkId')
|
|
customer_id = tm_customer.get('pkId')
|
|
all_data.append([car_id, customer_id, current_car_number])
|
|
matched = True
|
|
break
|
|
|
|
if matched:
|
|
break
|
|
|
|
total = data_block.get('total') or 0
|
|
if page_no * 100 >= int(total):
|
|
break
|
|
page_no += 1
|
|
time.sleep(0.3)
|
|
|
|
if not matched:
|
|
all_data.append([None, None, car_number])
|
|
|
|
time.sleep(2)
|
|
|
|
result_df = pd.DataFrame(all_data, columns=['carId', 'customerId', 'car_number'])
|
|
result_df.to_excel(output_path, index=False)
|
|
print("已保存:", str(output_path))
|