北京某著名滑雪场在12/17就会迎来正式营业, 正式营业后的雪票种类可以说是多种多样,那么为了快捷获取各种雪票的价格及预约名额,这里用datetime获取日期区间+多线程来实现。
import requests import csv import datetime import threading
url = 'https://65235638.12301.cc/co/Index_Product/getPriceAndStorageForManyDate/'
通过验证发现cookie并不需要
headers = { 'Host': '65235638.12301.cc', 'Referer': '替换你的referer', 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36', # 'cookie': cookie, # 'Content-Length': '451', }
因为请求是post,并且携带参数之一就是格式化日期eg2021-12-15,所以这里利用datetime模块的timedelta通过for循环遍历,将格式化日期放入列表
# 遍历日历并以格式化输出 d = datetime.datetime.now() # print(d.strftime('%Y-%m-%d')) datelist = [] # 因为正式营业是17号,编程当天是15号,所以这里range起始是2 for i in range(2,74): end_d = d + datetime.timedelta(days=i) end_d = end_d.strftime('%Y-%m-%d') datelist.append(end_d)
这里写表头
f = open('nanshan_store_price.csv','w') writer = csv.writer(f) writer.writerow(['日期','ticket_type','price','storage'])
因为返回的数据中,雪票是以数字代码表示的,所以要替换成中文对应名字,这里用zip的方式实现,方便后续遍历时一个代码通用。
【注意】因为是多线程实现,所以在调用csv文件时要加锁,不然写出来的数据可能会乱。
def get_nanshanski_available_spot(date): ticket_list = ['1210476','1210497','1210411','1210491'] name_list = ['日场全天','日场全天自带雪具','日场4小时','日场4小时自带雪具'] pair = list(zip(ticket_list,name_list)) payload = { 'pids': '1210476-1247816-1210497-1210411-1210491-1210500-1210504-1210506-1210507-1227916-1227923', 'tids': '1213124-1250464-1213145-1213059-1213139-1213148-1213152-1213154-1213155-1230564-1230571', 'aid': '替换自己的', 'date': date, 'time_share': '1', 'token': 'token是必须的,替换自己的token' } res = requests.post(url,headers=headers,data=payload,verify=False) jsdata = res.json()['data'] for k,v in jsdata.items(): for k,v in v.items(): for p in pair: if k == p[0]: k = p[1] print(date,k,v['price']/100,v['store']) lock.acquire() writer.writerow([date,k,v['price']/100,v['store']]) lock.release()
if __name__ == '__main__': lock = threading.Lock() ts = [] for date in datelist: t = threading.Thread(target=get_nanshanski_available_spot,args=(date,)) t.start() ts.append(t) for t in ts: t.join() f.close()
成果展示
不难看出周末的雪票属实供不应求,而周中的供应绰绰有余,而且价格实惠。另外自带学具的雪票数量非常有限,所以有需求的雪友们一定要尽早预定。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)