【Python 滑雪场预约名额自动爬取】

【Python 滑雪场预约名额自动爬取】,第1张

【Python 滑雪场预约名额自动爬取】

由于疫情原因,今年北京某著名滑雪场采取预约制。由于试营业期间票价非常实惠,可以说是一票难求,所以用python写个小程序自动爬取空余名额,结合crontab执行定时任务以及smtplib这个包可以实现每分钟自动爬取,并在指定日期有空位时立即自动发送邮件,是个抢位置利器 hhh

眼看试营业即将结束,这里分享一下代码。

其实整体也不难,主要通过devtool找到获取预约名额数据的api即可。

import requests 
import csv
import datetime
# autoemail是自己写的自动发送邮件的类,后面给源码
from autoemail import AutoEmail

# 禁用verify=False时的warning。不禁用的话crontab定时任务会不断在terminal给你发mail
requests.packages.urllib3.disable_warnings()
# 数据接口

url = 'https://65235638.12301.cc/co/Index_Product/getCalendarPriceList'
# 请求头,这里大家自行在devtool里复制粘贴就行
headers = {
	'Host': '65235638.12301.cc',
	'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': ,
	'Content-Length': '451',
}
# 注意 这里因为试营业时期只有12月,所以暂时注释掉了1 2 月份,以免报错
date_list = [
'2021-12',
# '2022-01',
# '2022-02'
]

接下来编写获取数据的函数。这里的值都在devtool的payload里获取。 

def get_nanshanski_available_spot(date_list):
	for d in date_list:
		payload = {
			'pid': '',
			'aid': '',
			# 这里将tid变更为新版tid之后即可获得试营业日期的票务信息
			'tid': '',
			'date': d,
			'token': ''
		}

		res = requests.post(url,headers=headers,data=payload,verify=False)
		# # print(res.text)
		# # print(res.json())
		jsdata = res.json()['data']
		print(jsdata)
if __name__ == '__main__':
	get_nanshanski_available_spot(date_list)

成果展示 

 

自动发邮件的代码如下。通过在程序中调用这个类实例化,还可以覆盖标题和内容,直接显示空余的具体数量。大家可以自行研究。 

from smtplib import SMTP_SSL 
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# from email.header import Header 


class AutoEmail():

	def __init__(self):

		self.host = 'smtp.qq.com'
		self.sender = '[email protected]'
		self.pwd = '替换你自己的'
		self.receiver = '[email protected]'
		self.title = '【重要】南山预约已有空位'
		self.content = 'test'

	def auto_send_email(self):
		msg = MIMEMultipart()
		msg['Subject'] = self.title
		msg['From'] = self.sender
		msg['To'] = self.receiver
		msg.attach(MIMEText(self.content,'plain','utf-8'))
		smtp = SMTP_SSL(self.host)
		smtp.login(self.sender,self.pwd)
		smtp.sendmail(self.sender,self.receiver,msg.as_string())
		smtp.quit()

 最后通过crontab可以实现每分钟自动爬取数据,具体实现可以参考上一篇内容。 

 

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5658056.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存