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里面有聲明。
最后 告訴大家 也給自己打氣
加油
做生活里的小強