12306车票查询
本帖最后由 18382747915 于 2018-9-25 15:58 编辑输入地址,时间,车票类型即可查询车票,
做了一半,想做成全自动抢票,目前遇到的问题是12306的验证码识别,正在努力解决中
先把这个半成品发出来:
源码如下:
def select():
y = input("请输入出发地:")
chufadi=csm(y)
if chufadi!='0':
y=input("请输入目的地:")
daodadi=csm(y)
if daodadi!='0':
date=input("请选择出发日期(日期格式:xxxx-xx-xx):")
print("0:成人票")
print("1:学生票")
shenfen=input("请选择")
if shenfen=='0':
shenfen='0X00'
elif shenfen=='1':
shenfen='ADULT'
else:
print('车票类型选择错误')
url='https://kyfw.12306.cn/otn/leftTicket/queryA?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=%s'%(date,chufadi,daodadi,shenfen)
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:62.0) Gecko/20100101 Firefox/62.0',
'Host': 'kyfw.12306.cn',
'Referer':'https://kyfw.12306.cn/otn/leftTicket/init'}
reque=requests.get(url,headers=header)
html=json.loads(reque.text.strip('()[]'))
html=html['data']
html = html['result']
h=len(html)
if h>0:
# text=re.findall('(.*?)\|预订\|(.*?)\|(.*?)\|(.*?)',str(html),re.S)
text=re.findall('\|预订\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|Y\|',str(html),re.S)
# print(text)
print('一共%s趟列车'%str(len(text)))
for i in text:
print('车次:%s'%i[1])
print('出发时间:%s'%i[6])
print('到达时间:%s'% i[7])
print('历时:%s'%i[8])
print('-------------------------------')
else:
print("没票了")
else:
print("未找到目的地城市的车站,请检查输入是否错误")
else:
print("未找到该城市的车站,请检查输入是否错误")
def csm(y):
url = 'https://im0x.com/C/detail/155'
date = requests.get(url)
html = date.text
Citycode =re.findall('\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|\d',html,re.S)
Citycode=str(Citycode)
Citycode=re.findall("('("+y+".*?), (.*?),(.*?),(.*?))",Citycode,re.S)
cou=len(Citycode)
if cou>0:
for i ,l in enumerate(Citycode):
image_list=l[0].split(",")
print ('%s:%s'%(i,eval(image_list[0])))
i=int(input("请选择:"))
lit=list(Citycode)
chengshima=lit[2]
chengshima=eval(chengshima)
return chengshima
else:
return "0"
if __name__ == '__main__':
select()
请问代码复制粘贴过去为何运行不了,你之后修改的那个加在哪里eval() arg 1 must be a string, bytes or code object
修改代码片段为:
i = int(input("请选择:"))
lit = list(Citycode)
chengshima = lit
chengshima = eval(chengshima)
return chengshima eval() arg 1 must be a string, bytes or code object
修改代码片段为:
i = int(input("请选择:"))
lit = list(Citycode)
chengshima = lit
chengshima = eval(chengshima)
return chengshima 先收藏备用,期待可以自动抢票 这是自动抢票的铺垫? 我一直在等那个图,but他就是不显示,真的是,代码看了一下,python,不懂,不过支持一下 谢谢分享,期待可以自动抢票 感谢分享 python做这些真的有天然优势 感谢分享
谢谢分享,期待可以自动抢票 期待楼主完善开发,辛苦。