Python3火車票信息查詢(2)

良辰美景奈何天

前一篇文章記錄了利用Python查詢火車票的的代碼齐疙,本篇文章記錄一下其中的一些知識(shí)點(diǎn):
1、docopt
2嬉愧、抓取數(shù)據(jù)requests
3贩挣、pprint喉前、prettytable没酣、colorama模塊
4、Python類

1卵迂、docopt模塊

首先介紹一下docopt:
docopt根據(jù)你寫的文檔描述裕便,可以自動(dòng)為你生成解析器,
可以非常容易的為你的python程序創(chuàng)建命令行界面(Command Line Interface见咒,CLI)偿衰。
docopt的安裝和一般的庫(kù)沒有什么區(qū)別 pip install docopt
他的使用方法是這樣的:
由三個(gè)雙引號(hào)括起來(lái)(當(dāng)然是成對(duì)的),作為文檔的標(biāo)識(shí)改览,內(nèi)容包括四部分:
1下翎、腳本的功能解釋
2、usage 是使用方法宝当,第一個(gè)參數(shù)是腳本的名稱视事,在[]內(nèi)的是可選參數(shù),<>是必選的參數(shù)
3庆揩、參數(shù)的說(shuō)明
4俐东、使用舉例
可以看一下之前的代碼:

"""命令行火車票查看器

Usage:
    tickets [-dgktz] <from> <to> <date>

Options:
    -h, --help 查看幫助
    -d         動(dòng)車
    -g         高鐵
    -k         快速
    -t         特快
    -z         直達(dá)

Examples:
    tickets 上海 安陽(yáng) 2016-10-10
    tickets -dg 上海 安陽(yáng) 2016-10-10
"""
接下來(lái)就是代碼中獲取參數(shù)跌穗,使用起來(lái)也是比較簡(jiǎn)單的
arguments = docopt(__doc__)
from_station = stations.get(arguments['<from>'])
to_station = stations.get(arguments['<to>'])
date = arguments['<date>']

2、獲取123306網(wǎng)站數(shù)據(jù)

第二個(gè)是獲取12306的余票信息虏辫,通過(guò)requests的get函數(shù)
先是定義URL地址蚌吸,然后通過(guò)requests.get(url)獲取數(shù)據(jù),
在本次的代碼中砌庄,verify=False羹唠,忽略對(duì)SSL證書的驗(yàn)證,
獲取的數(shù)據(jù)轉(zhuǎn)換為json格式
通過(guò)r.json().keys() 可以查看都有哪些數(shù)據(jù)
dict_keys(['httpstatus', 'data', 'status', 'validateMessagesShowId', 'messages', 'validateMessages'])

3娄昆、pprint肉迫、prettytable、colorama模塊

第三個(gè)是pprint模塊的打印函數(shù)pprint
這個(gè)模塊提供了一些比較好的打印函數(shù)稿黄,如果和json模塊配合使用喊衫,對(duì)于輸出結(jié)構(gòu)化數(shù)據(jù)比較好

下面一段內(nèi)容是從官方文檔拷貝的,對(duì)這個(gè)函數(shù)進(jìn)行了詳細(xì)的說(shuō)明:
pprint.pprint(object, stream=None, indent=1, width=80, depth=None)

Prints the formatted representation of object on stream, followed by a newline. If stream is None, sys.stdout is used. This may be used in the interactive interpreter instead of the print() function for inspecting values (you can even reassign print = pprint.pprint for use within a scope). indent, width and depth will be passed to the PrettyPrinter constructor as formatting parameters.

這部分的第二個(gè)內(nèi)容是prettytable杆怕,這個(gè)模塊不是Python的內(nèi)置模塊族购,需要自己安裝
在上一篇文章中我們看到了prettytable的使用方法:
def pretty_print(self):
        pt = PrettyTable()
        pt._set_field_names(self.header)
        for train in self.trains:
            pt.add_row(train)
        print(pt)
這里先定義了一個(gè)prettytable的類pt,然后通過(guò)_set_fiel_names設(shè)置了表頭陵珍,之后在循環(huán)里面依次添加行記錄寝杖,然后打印出來(lái)

另外還看到了一種用法,增加了一些設(shè)置參數(shù)
x = PrettyTable(["name", "age", "sex", "money"])
x.align["name"] = "l" # 對(duì)齊方式
x.padding_width = 0 # 每個(gè)字段中的內(nèi)容距離邊界的距離互纯,可以修改這個(gè)參數(shù)看看效果
x.add_row(["Rocky",20, "male", 8000])
x.add_row(["Alex",21, "male", 5000])
x.add_row(["Helen",22, "Female", 3000])
print x

這部分的最后一個(gè)內(nèi)容是colorama瑟幕,這個(gè)模塊是用來(lái)對(duì)輸出內(nèi)容的顏色進(jìn)行控制的
init(autoreset=True) 
 #通過(guò)使用autoreset參數(shù)可以讓變色效果只對(duì)當(dāng)前輸出起作用,輸出完成后顏色恢復(fù)默認(rèn)設(shè)置
Fore.GREEN + raw_train['from_station_name'] # 輸出綠色字符

4留潦、Python的類知識(shí)

在本次的代碼實(shí)現(xiàn)過(guò)程中只盹,作者定義了一個(gè)類,用來(lái)將獲取的車次信息整理為良好的輸出格式兔院,
對(duì)于Python類的信息在書上殖卑、網(wǎng)上可以查到好多資料,這里就不記錄了坊萝,
剛剛開始的時(shí)候?qū)︻愔械膕elf不是很熟悉孵稽,用起來(lái)感覺很別扭,要勤加練習(xí)
面向?qū)ο蠹夹g(shù)簡(jiǎn)介
類(Class): 用來(lái)描述具有相同的屬性和方法的對(duì)象的集合十偶。
          它定義了該集合中每個(gè)對(duì)象所共有的屬性和方法菩鲜。對(duì)象是類的實(shí)例。
類變量:類變量在整個(gè)實(shí)例化的對(duì)象中是公用的惦积。
           類變量定義在類中且在函數(shù)體之外接校。類變量通常不作為實(shí)例變量使用。
數(shù)據(jù)成員:類變量或者實(shí)例變量用于處理類及其實(shí)例對(duì)象的相關(guān)的數(shù)據(jù)荣刑。
方法重寫:如果從父類繼承的方法不能滿足子類的需求馅笙,
          可以對(duì)其進(jìn)行改寫伦乔,這個(gè)過(guò)程叫方法的覆蓋(override),也稱為方法的重寫董习。
實(shí)例變量:定義在方法中的變量烈和,只作用于當(dāng)前實(shí)例的類。
繼承:即一個(gè)派生類(derived class)繼承基類(base class)的字段和方法皿淋。
          繼承也允許把一個(gè)派生類的對(duì)象作為一個(gè)基類對(duì)象對(duì)待招刹。          
          例如,有這樣一個(gè)設(shè)計(jì):一個(gè)Dog類型的對(duì)象派生自Animal類窝趣,
          這是模擬"是一個(gè)(is-a)"關(guān)系(例圖疯暑,Dog是一個(gè)Animal)。
實(shí)例化:創(chuàng)建一個(gè)類的實(shí)例哑舒,類的具體對(duì)象妇拯。
方法:類中定義的函數(shù)。
對(duì)象:通過(guò)類定義的數(shù)據(jù)結(jié)構(gòu)實(shí)例洗鸵。對(duì)象包括兩個(gè)數(shù)據(jù)成員(類變量和實(shí)例變量)和方法越锈。

參考資料:
http://cn.python-requests.org/zh_CN/latest/user/advanced.html
http://hao.jobbole.com/docopt/
https://docs.python.org/3.2/library/pprint.html
https://github.com/dprince/python-prettytable
http://www.runoob.com/python/python-object.html
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820062641f3bcc60a4b164f8d91df476445697b9e000

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市膘滨,隨后出現(xiàn)的幾起案子甘凭,更是在濱河造成了極大的恐慌,老刑警劉巖火邓,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丹弱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡铲咨,警方通過(guò)查閱死者的電腦和手機(jī)躲胳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸣驱,“玉大人泛鸟,你說(shuō)我怎么就攤上這事蝠咆∮欢” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵刚操,是天一觀的道長(zhǎng)闸翅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)菊霜,這世上最難降的妖魔是什么坚冀? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮鉴逞,結(jié)果婚禮上记某,老公的妹妹穿的比我還像新娘司训。我一直安慰自己,他們只是感情好液南,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布壳猜。 她就那樣靜靜地躺著,像睡著了一般滑凉。 火紅的嫁衣襯著肌膚如雪统扳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天畅姊,我揣著相機(jī)與錄音咒钟,去河邊找鬼。 笑死若未,一個(gè)胖子當(dāng)著我的面吹牛朱嘴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粗合,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼腕够,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了舌劳?” 一聲冷哼從身側(cè)響起帚湘,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甚淡,沒想到半個(gè)月后大诸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贯卦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年资柔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撵割。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贿堰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啡彬,到底是詐尸還是另有隱情羹与,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布庶灿,位于F島的核電站纵搁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏往踢。R本人自食惡果不足惜腾誉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧利职,春花似錦趣效、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至哮伟,卻和暖如春干花,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背楞黄。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工池凄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鬼廓。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓肿仑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親碎税。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尤慰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容