问题遇到的现象和发生背景
用python写火车余票监测通过server酱以微信的形式进行提送告知
最后查询的时候一直是No connection adapters were found for "['\nhttps://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=--&leftTicketDTO.from_station=--&leftTicketDTO.to_station=--&purpose_codes=ADULT\\n%27]%22%EF%BC%8C%E7%BD%91%E5%9D%80%E9%87%8C%E4%B8%8D%E6%98%AF%E6%88%91%E6%83%B3%E6%9F%A5%E8%AF%A2%E7%9A%842022-07-18%E5%8C%97%E4%BA%AC%E5%88%B0%E5%8E%A6%E9%97%A8%E7%9A%84%E7%BD%91%E5%9D%80
问题相关代码,请勿粘贴截图
import requests
import re
import time
requests.packages.urllib3.disable_warnings()#关闭https证书验证警告
调用service 酱,推送到微信
def send_msg(title, info):
url = 'https://sctapi.ftqq.com/SCT159966T6Ou8yOocBYzaesamsSBzzkoM.send'\
% (title, info)
requests.post(url)
def get_station():
# 12306的城市名和城市代码js文件url
url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9235%27
r = requests.get(url, verify=False)
pattern = u'([\u4e00-\u9fa5]+)|([A-Z]+)' # \u4e00-\u9fa5是所有汉字的unicode编码范围
result = re.findall(pattern, r.text) # 按正则表达式规则匹配
station = dict(result)
return station
生成查询的url
def get_query_url(text):
# 城市名代码查询字典
# key:城市名 value:城市代码
try:
date = '2022-07-18'
from_station_name = '北京'
to_station_name = '厦门'
from_station = text[from_station_name] # 将城市名转换为城市代码
to_station = text[to_station_name]
except:
date, from_station, to_station = '--', '--', '--'
# api url 构造
url = (
'https://kyfw.12306.cn/otn/leftTicket/query?'
'leftTicketDTO.train_date={}&'
'leftTicketDTO.from_station={}&'
'leftTicketDTO.to_station={}&'
'purpose_codes=ADULT'
).format(date, from_station, to_station)
print(url)
return url
获取车次信息
def query_train_info(url, text):
try:
r = requests.get(url, verify=False)
# 获取返回的json数据里的data字段的result结果
raw_trains = r.json()['data']['result']
for raw_train in raw_trains:
# 循环遍历每辆列车的信息
data_list = raw_train.split('|')
# 车次号码
train_no = data_list[3]
# 出发站
from_station_code = data_list[6]
from_station_name = text['北京']
# 终点站
to_station_code = data_list[7]
to_station_name = text['厦门']
# 出发时间
start_time = data_list[8]
# 到达时间
arrive_time = data_list[9]
# 总耗时
time_fucked_up = data_list[10]
# 一等座
first_class_seat = data_list[31] or '--'
# 二等座
second_class_seat = data_list[30] or '--'
# 软卧
soft_sleep = data_list[23] or '--'
# 硬卧
hard_sleep = data_list[28] or '--'
# 硬座
hard_seat = data_list[29] or '--'
# 无座
no_seat = data_list[26] or '--'
# 打印查询结果
info = (
'车次:{}\n出发站:{}\n目的地:{}\n出发时间:{}\n到达时间:{}\n消耗时间:{}\n座位情况:\n一等座:「{}」 \n二等座:「{}」\n软卧:「{}」\n硬卧:「{}」\n硬座:「{}」\n无座:「{}」\n\n'.format(
train_no, from_station_name, to_station_name, start_time, arrive_time, time_fucked_up, first_class_seat,
second_class_seat, soft_sleep, hard_sleep, hard_seat, no_seat))
print(info)
if (second_class_seat and second_class_seat!= '无' and train_no == "G321"):
send_msg("G321次高铁二等座有票了", info)
return True
else:
continue
except Exception as e:
print(e)
text = [get_station()]
print(text)
url = [get_query_url(text)]
循环查询,直到查询到想要的车次有票终止
while True:
time.sleep(1) # 刷票频率
if query_train_info(url,text):
break
运行结果及报错内容

我的解答思路和尝试过的方法
我想要达到的结果
可以正确访问2022-07-18 北京到厦门 G321车次二等座的网址和查询余票信息

