小白之python开发:订票系统爬虫

今天学习了订票网站的信息爬虫,由于该类网站对信息具有一定的加密反爬虫手段,因此要先对该类信息进行解密
1.同之前获取目标网页,在实战中发现网页友谊隐藏了车次信息,无法直接在网页源码中找到该类信息,于是在网页中打开F12的network,结果发现再网页中点击查询按钮后网页的后台会专门以ajax的方式发送一份文件,并且在该文件中发现了目标车辆信息
开发者工具

#获取目标网页
def querry():
    respose=requests.get('https://kyfw.12306.cn/otn/leftTicket/queryX?leftTicketDTO.train_date=2019-02-26&leftTicketDTO.from_station=TYV&leftTicketDTO.to_station=TJP&purpose_codes=ADULT')
    # print(respose.text)
    return  respose.json()['data']['result']

2.分割数据,解析数据,通过观察数据信息,发现所有关键信息都以 ’ | '来区分,于是本人采用split来分割数据,并且使用变量 j 来统计数据的索引号,最后成功解析出余票的索引号

for i in querry():
    #以|为分割数据信息用以更好看清数据
    tim_list = i.split('|')
    #定义变量给数据做标记
     j=0
     for n in tim_list:
         print(j,n)
         j+=1
     # 车序列号:3
     # 二等座:30 一等座:21 商务座:32 无座:26 软卧:23 硬卧:28 硬座:29 高级软卧:21
    #本测试用例以硬座为测试对象

3.利用索引取相应数据

 #判断
     if tim_list[29]!='无' and tim_list[29]!='':
        print(tim_list[3],'有票',tim_list[29])
    else:
        print(tim_list[3],'没票')


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#这只是一个半成品,只是实现了,一个完整的订票过程,对于,如果刷票,自己研究 #简单过程 # 第一、getRandAndCookie() 获得cook 和一个随机数用于登录 # 第二、getEnterRandCode() 得到登录时的识别码 # 第三、setuseandpassword(randcode,use,password) 发送随机数、识别码和用户及密码。由于随机数只在内部使用,所以定义成了全局变量, # 第四、GetTrainList() 得到所有车站列表,'@bjb|北京北|VAP|beijingbei|bjb|0' 其中有中文、拼音、拼音缩写、所一个ID(唯一),其主要是可以,通过上面的列表,找到它的唯一ID,TranCityToId('南昌') # 第五、GetTrainNumList(date,fromstationid,tostationid,starttime) 得到哪到哪的所在车次,消息格式如下,其中所以,一下车次的的ID:"id":"650000K1060I" # {"end_station_name":"北京西","end_time":"16:18","id":"650000K1060I","start_station_name":"深圳","start_time":"10:54","value":"K106"} # 通过ChangeToTrainNumId('K106')得到车次ID # 第六、QueryTrain(fromstationid,tostationid,date,stationNum,starttime) 就是点击查询按键,得到是否有能预订,格式如下 #       南昌         20:12,    北京西        07:38,11:26,--,--,--,--,10,有,有,--,有,有,--,<a name='btn130_2' class='btn130_2' # 通过choiceSubmitNum(stationNum,trainsubmitinfo)提取出getSelected()消息 # 第七、submitRequest(choiceSubmitNum(stationNum,trainsubmitinfo),date,starttime) 就是点击预订按钮 # 第八、getrandCheckCode()得到提交订单的识别码 # 第十、CheckInMyTicket(info,randcode,peoples)点击提交,如果成功的话,就会返回{"errMsg":"Y"} # 出于,网络是UTF8格式,所以,必须# -*- coding: utf-8 -*-,(当然,自己转换也是可以的) # 出于这一个控制台信息,所以,识别码的图片在脚本同一目录 #得到头信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值