背景:最近想去上海天文馆玩,但是门票一出来就被抢空了,写个脚本爬一下门票什么时候有,没接wxpy,有兴趣可以加进去,当票数>0时给自己微信发提醒消息。
import requests
import urllib
import time
from requests.packages.urllib3.exceptions import InsecureRequestWarning
#requests 移除SSL认证,输出InsecureRequestWarning提示的取消方法
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
if __name__ == "__main__":
freeday_date = "2021-11-06"
url = "https://ticket.sstm.org.cn"
path = "/vendor/reserve/getReservedateListByStadiumId.xhtml"
#Charles抓包获取请求参数
post_form_data = {
"stadiumId": 69001,
"appId": "wx1d7ddce169710ba7"
}
#mpsessid抓包看header里的,猜测是账户相关
header = {
"mpsessid":"xxxxxxxxxx",
"content-type":"application/x-www-form-urlencoded",
"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.16(0x18001026) NetType/WIFI Language/zh_CN"
}
session = requests.session()
#返回本周的门票数据列表
def send_request():
tickets_result = session.post(url + path,data=urllib.parse.urlencode(post_form_data),headers=header,verify=False).json()
return tickets_result["data"]["resultList"]
times = 0
while True:
tickets_list = send_request()
for item in tickets_list:
if item["reservedate"] == freeday_date:
target_ticket = item["avaiablenum"]
#计数
times += 1
print("第{}次请求,{}日上海天文馆可购票数:".format(times,freeday_date) + str(item["avaiablenum"]))
time.sleep(5)
|