Python3實現火車票查詢工具

來源:互聯網
上載者:User

標籤:簡單   利用   line   興趣   com   cst   令行   模組   odi   

Python 實現火車票查詢工具

 

一. 實驗介紹

    通過python3實現一個簡單的命令列版本的火車票查詢工具,用實際中的例子會更感興趣,不管怎麼樣,既練習了又可以自己使用。

 

1.  知識點: 

  • Python 基礎知識的綜合運用
  • docopt, requests, colorama, prettytable 庫的使用
  • setuptools 的使用

2. 效果:

 

二. 介面設計

  介面我們就按照12306官網的查詢格式如下:

    程式名: pickets

  查詢方式: 程式名 出發地 目的地 出發日    

  火車類型: 

      -g    高鐵

      -d    動車

      -t    特快

      -k    快速

      -z    直達

  最終組合介面為:

    python  pickets.py  [-gdtkz]  from  to   date

 

三. 代碼實現

 

  根據介面設計需要安裝的庫:

G:\Python項目實戰\pickets>pip3 install requests prettytable docopt colorama

   requests:  使用Python訪問HTTP資源的必備庫            詳細使用請訪問:http://www.cnblogs.com/python-nameless/p/6013647.html

   prettytable: 可以將列印內容格式化為像MySQL一樣的輸出      詳細使用請訪問:http://www.cnblogs.com/python-nameless/p/6013698.html

   docopt:命令列參數解析工具                     詳細使用請訪問:https://github.com/docopt/docopt

     colorama: 命令列著色工具

 

1. 解析參數

  docopt模組可以按照我們自己在文檔字串定義的格式來解析參數,如下:

 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # __Author__: Hong 4  5 """火車票查詢工具 6  7 Usage: 8     tickets [-gdtkz] <from> <to> <date> 9 10 注意:Usage為固定詞彙,其他報錯。11 12 Options:13     -h,--help   顯示協助菜單14     -g          高鐵15     -d          動車16     -t          特快17     -k          快速18     -z          直達19 20 Example:21     tickets 北京 大同 2016-08-2822     tickets -t 北京 大同 2016-08-2823 """24 from docopt import docopt25 from requests import request26 import prettytable27 import colorama28 29 30 def cli():31     """command-line interface"""32 33     arguments = docopt(__doc__)34     print(arguments)35 36 if __name__ == ‘__main__‘:37     cli()

由上面的程式中,docopt會根據我們在docstring中定義的格式解析參數並返回一個字典(arguments),例如查詢北京到大同的特快如下:

G:\Python項目實戰\pickets>python pickets.py -tk  北京 大同 2016-10-30

 參數解析結果:

1 G:\Python項目實戰\pickets>python pickets.py -tk  北京 大同 2016-10-302 {‘-d‘: False,3  ‘-g‘: False,4  ‘-k‘: True,5  ‘-t‘: True,6  ‘-z‘: False,7  ‘<date>‘: ‘2016-10-30‘,8  ‘<from>‘: ‘北京‘,9  ‘<to>‘: ‘大同‘}

2. 擷取資料

  參數解析好以後,我們可以通過12306官網擷取我們需要的資料,IE瀏覽器開啟12306官網的查票系統,輸入出發地,目的地,日期,查詢,通過F12開發人員模式找到請求地址(重新整理一次):

通過此請求URL,我們可以看到有我們需要的資訊,或者直接點擊參數查看:

  可以看到參數為:出發地   查詢類型(成人,學生)   日期  目的地

通過本文可以看到:返回一個json格式的資料,即一個字典,裡邊包括了各個網站的中文名和網站代號,我們可以利用這個介面來擷取。

開啟此頁的源碼(在頁面右擊選擇查看源碼):

查看一下具體內容:

複製此連結前邊需要加頂層網域https://kyfw.12306.cn開啟, 如下:

https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8971

station_names是一個很長的字串,裡邊包括了所有車站中文名,拼音,簡寫,代號等,

 

Python3實現火車票查詢工具

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.