最近也快到春運高峰期了,每年到這個時候都是鐵路部門最忙的時候,同時也是12306(以後都以**來代替)大考的時候,出於乙個技術人員對於**的好奇所以嘗試獲取它的最新資料。
之前準備實現乙個第三方訂票系統,後來分析之後發現破解驗證碼這第一關就沒辦法完成,所以最後放棄這個想法。
後來考慮即使不能通過第三方來訂票,是否可以通過第三方來獲得現在最新的餘票資訊?後來分析**的查詢餘票的傳輸的資料發現的確可以實現。現在就將獲取最新餘票資料、以及在自己的系統中完全實現實時查詢餘票資訊的方法介紹給大家。另外在此申明本人並沒有針對**的惡意,也沒有絲毫炫耀的意思,本人就一普通的技術愛好者。好了,廢話不說正題開始了:
一、分析**查詢餘票在網路上傳輸的資料
在網路上傳的位址為:
首先知識struts的都知道後台採用struts1來進行接收
[後台方法名為:queryleftticket]
&orderrequest.train_date=2013-01-22 [出發日期]
&orderrequest.from_station_telecode=bjp [出發站的編號,隨後會為大家解析bjp這些編號都是什麼意思,這裡代表就是北京]
&orderrequest.to_station_telecode=gzq [到站為廣州]
&orderrequest.train_no= [車次]
&trainpasstype=qb[有三個值:全部、始發、過路]
&trainclass=qb%23d%23z%23t%23k%23qt%23
&includestudent=00
&seattypeandnum=
&orderrequest.start_time_str=00%3a00--24%3a00 [出發時間]
最主要的就只有三個引數:
&orderrequest.train_date=2013-01-22
&orderrequest.from_station_telecode=bjp
&orderrequest.to_station_telecode=gzq
初看好像完全沒有規律,但是規律肯定會有的,不然如何展示到頁面上呢?
看看怎麼分析:
【is.close();
}//
釋放所有的鏈結,一般在所有的請求處理完成之後,才需要釋放
}通過這個方法就可以得到返回回來的結果串。
public
staticstring decodespan(stringtmp)
returnspantext;
}以上**就是解析span標籤中的文字。
最後解析完之後就可以存到本地的資料庫中了。
同時也可以進一步開發乙個執行緒,可以先在資料庫中配置幾條路線,比如從北京到廣州、從廣州到北京等,然後
啟動多個執行緒,每個執行緒對應查一條執行緒,然後每隔一段時間會啟動這些執行緒去**查詢最新的餘票資訊,然後
將結果存入本地庫中,最後在本地專案中就可以看到最新的資訊了。最後宣告寫這篇文間純粹個人愛好不針對
任何組織及個人,很多技術都是在互想學習中提高的,另外嚴厲鄙視那種使用自動工具來惡意提交的不法份子
說不定影響的就是你我自己的購票流程。
12306餘票查詢 二 獲取餘票資料
上節分析了獲取餘票資料的請求,本節開始抓取資料class get tickets def init self,start station,destination,date self.date date self.params 首先是傳遞你到底要查什麼,就是前面分析所需的三個引數 其實這裡要判斷一下,...
12306 餘票檢測軟體
根據日期,始發站,終點站,車次等資訊檢測 12306 是否有餘票 給 12306 購票網頁注入指令碼,指令碼模擬請求,解析引數,獲取最終的餘票資訊 餘票資訊通過介面資訊通知服務端 1.獲取所有車站名稱對應的 map station names是 12306 定義的全部變數,注入的指令碼可以直接使用。...
Python爬蟲學習 一 12306餘票資訊爬取
1.12306有反爬取機制,餘票資訊是在網頁就緒以後非同步載入出來的,首先我們可以開啟谷歌瀏覽器找到,找到中間請求的url,例如餘票檢索按鈕單擊的時候 由上圖可知,餘票資訊是放在result裡面的 2.取得這些資料 req urllib.request.request html req.add he...