隨著大數據時代的蓬勃發展和大數據技術的深入應用,網絡自動采集機票價格成為了可能。本文結合工作實踐,再現從需求分析到技術選型,再到完成設計的工作過程。
機票采價需求分析
獲取明確的需求是高效、準確開展工作的前提。機票采價工作中,一是有特殊的時間要求,需在特定的日期采集特定日期的機票;二是未通過攜程、飛豬等第三方平臺進行,而是通過航班官網采集實際的機票價格;三是為保證價格采集有佐證,需在訂單頁將價格區域截圖保存。
相關技術選型
在分析研究需求之后,發現關鍵技術點有兩個:一是采集實際發生價格,二是價格區域截圖,需要選擇合適的程序。通過查找相關資料,發現Python的Selenium庫可以實現采價和截圖的需求。Selenium可以模擬用戶在瀏覽器中的一切操作,甚至可以不打開瀏覽器模擬操作(后臺無界面操作)。此結果完美符合技術需求,既能抓取到價格又能實現截圖。
東航采價設計與實現
在東航網站的采價中,最為困擾的有兩個問題:一個是登錄的驗證,另一個是網頁數據加載不出來、中途彈出驗證的問題。
登錄驗證和中途驗證。通過相關資料找到了一個比較成熟的解決方案。通過比對驗證圖片和原始圖片的RGB信息找到缺口坐標軸計算水平移動距離,采取“進3退1”的方式移動到缺口位置,即可實現驗證通過。
刷新網頁直到數據加載。由于會存在數據加載不出來的問題,所以在查詢結果頁加入元素判斷,將某個關鍵元素用Xpath的方式獲取,如果存在就繼續執行操作,如果不存在則刷新網頁重新判斷。
采價日期計算。本文的思路為獲取當前日期,并根據采價日期的要求計算采價的日期段。再利用Pandas庫的Series方法生成采價日期段,用于查詢機票。對于不同的網站有不同的日期格式,計算日期方法中設置日期格式參數,用于格式化日期之用。
價格區域截圖。在訂單頁面,通過F12工具定位價格區域的Xpath,并應用Selenium的方法獲取該Xpath的坐標和長、寬。操作截圖的時候是先截圖整個網頁,再根據價格區域的坐標、長、寬進行截圖。
國航采價設計與實現
查詢機票。對于出發城市和到達城市的輸入框,國航網站有輸入提示,本文思路為按照中文將出發地和輸入地發送過去,獲取提示框的Xpath地址,再調用點擊方法即可實現提示框的輸入。出發日期直接將日期輸入到輸入框即可。
識別彈窗。在實際操作中,成都有彈窗提示登記窗口,此時調用Selenium的方法,切換到Alert窗口,如果切換成功則點擊彈窗表示確認,若切換失敗則無需做任何操作。
滑動到訂單頁底部。實際開發過程中,并沒找到具體的Selenium滑動頁面方式,可以通過編寫Javascript代碼的方式發送給瀏覽器執行,具體代碼如下:
相關體會
一是技術選型很重要,采用合適的技術能促進工作更好地開展。二是程序可以進一步完善,可以抽象成公共的工具,出發地、到達地可以根據用戶指定去采價。