• Python爬虫之12306-分析请求总概述


    python爬虫也学了一段时间了。也爬过不少网站,最后我想用12306抢票器这个项目做一个对之前的学习的效果成见也是一个目标(开始学爬虫的时候,看到说,会爬12306,就会爬80%的网站),本人纯自学。可以弯路走了不少,爬的网站也没有什么实质的价值(不是老师的作业,也不是老板的需求,就是自己的练习),所以嘛,不是有句话说的,人活着,就是为了搞事情。

    12306,真的是特别厉害的反爬,请求太难分析了。一些隐藏的参数,被转码的参数。不过分析成功后,你真的会感觉别的网站也就那么回事。

    ----------------------------登陆

     来到登陆页面。有验证码和登陆框。--登陆成功后就跳转了,用Mozilla Firefox浏览器也可以看到跳转以前的请求,但是我的Mozilla Firefox有BUG 别的都可以就是登陆不行。

    先看看验证码,点击刷新验证码

    链接找到了

     

     下面4个参数呢 前面3个事固定的也不懂代表什么意思。就看到一个 login 我想可能是代表登陆的验证码吧。第4个是个随机数。可是我反复刷新后,觉得不带那个也可以。没难度‘

    验证码验证:

     选择正确以后,多了:https://kyfw.12306.cn/passport/captcha/captcha-check 这个POST请求 3个参数

    answer 这个呢就是代表 你点的坐标,我这里点了3下 恰好有6个坐标。

    后面2个 不知道 应该是固定的

    看看返回的

    验证成功

    登陆

    我输入错的 返回就是这个  对的就返回正确。

    总结:登陆没难度

    ----------------------------查票

    查票链接:https://kyfw.12306.cn/otn/leftTicket/init

     

     输入 出发地,目的地 ,时间后。点击查询 

    多出了这个请求

    看看返回

    这不就是列车余票吗

    但是CBN 为什么是赤壁呢

    看看这个JS文件 就知道了

     所有的车站名都用英文大写表示了

    ----------------------------产生订单

    在没有登陆的时候点击预定。会弹出需要登陆的页面

    还会多出这个请求

     

    看到LOGIN这个单词,肯定和登陆有关        就是验证登陆状态吧,

     用Mozilla Firefox浏览器的就会发现当flag为 true的时候也就你成功登陆之后 才会跳转

    成功登陆后来到订单页面

    https://kyfw.12306.cn/otn/confirmPassenger/initDc

    看到了联系人的请求

    有个参数

    REPEAT_SUBMIT_TOKEN 

    这个参数是什么意思  我也不知道。。。

    要找这个对应的值,可就找的好苦

    在这里 

     

    选择一个联系人后 点击提交

    来分析第一个

     

    返回的什么 我不知道 我们看看请求的参数

     

    第一个 第二个是固定的

    第3个   第4个是乘客信息 第4个 

    tour_flag:dc 我开始以为是动车的意思 ,结果我想多了 是购票类型 dc为单程

    REPEAT_SUBMIT_TOKEN这个都知道在哪里了吧

     

     2张就用,隔开吧 这是我想的。最好就买1张

    下一个请求

     

     count 好像是表示座位类型 多试试就知道 余票是29张。

     看看请求参数

     train_date

    train_no #火车编号

    stationTrainCode  #火车列号

    seatType #座位类型 1是硬座,2是软座,3是硬卧,4是软卧,O是高铁二等座,M是高铁一等座,

    fromStationTelecode #出发站

    toStationTelecode #目的站

    leftTicket #也是和REPEAT_SUBMIT_TOKEN一样或得

    purpose_codes = 00

    train_location = PB

    _json_att

     就差最后一步了

    点击提交订单 

    分析这些 

    刚刚下了个迷你的火狐

    返回"data":{"submitStatus":true}说明请求成功,出票成功,如果为其他就是扣票失败

     这些参数 除了联系人信息都可以和REPEAT_SUBMIT_TOKEN这个参数一样获得。

    写博客也是不易

     这个没用任何语言    纯分析 一些细致的参数 在JS里面有声明。

    最后 告诉大家 也给自己打气

    加油  

     做生活里的小强

  • 相关阅读:
    帧同步与状态同步的区别
    spread语法解析与使用
    CoordinatorLayout自定义Bahavior特效及其源码分析
    更便捷的Android多渠道打包方式
    用Dart&Henson玩转Activity跳转
    用RxJava处理复杂表单验证问题
    用RxJava处理嵌套请求
    技术与业务的抉择————论程序员的“瓶颈”问题
    Android Studio单元测试入门
    Android一键多渠道分发打包实战和解析
  • 原文地址:https://www.cnblogs.com/ruogu/p/9655835.html
Copyright © 2020-2023  润新知