春運渡劫?Python幫你12306搶回家的火車票
前言
年味越來越淡,但我對過年的期待一直沒變。為了理想,離開家鄉。這一路,背上行囊,穿過人潮,千里迢迢。疲憊也好,激動也罷,總有家鄉值得牽掛。
春節是孟浩然“昨夜斗回北,今朝歲起東”的唏噓,不僅感嘆于“田家占氣候,共說此年豐”的蹉跎歲月,更多感傷于這一年下來的“無祿尚憂農”自我調侃的碌碌無為;春節是董必武“共慶新年笑語嘩,紅巖士女贈梅花”的對新年的期待,也有“舉杯互敬屠蘇酒,散席分嘗勝利茶。只有精忠能報國,更無樂土可為家。”的偉大抱負。
但是,所有的鄉愁和感傷,最好的解藥就是一張火車票。每當萬事俱備,總是只欠東風,我依然是被一張5mm厚的火車票攔在了門外。隱隱約約在我眼前出現,然后又悄無聲息的走掉,說的就是你,我花錢加速都搶不到的火車票。
大學四年以接近尾聲,遺憾于愛情的“你好我愛你,再見,對不起”。這種遺憾經過反復斟酌和推敲,有那么一刻,我感覺你我之間的距離就是那張“近在眼前,遠在天邊”可望而不可及的火車票。
由于鄉愁泛濫成災、愛情糜爛至極、友情西辭黃鶴,所以阿廣今天教大家如果用Python搶火車票!解決你的鄉情、愛情、友情,說不定還有基情?
數據介紹
12306官方部分數據如下:
實現過程
注:具有自然語言識別處理功能
(1)加載頭文件
- from distutils.log import warn as printf
- import sys
- from bosonnlp import BosonNLP
- import yaml
- from os.path import expanduser
- import os
- import collections
- import subprocess
- import datetime
(2)加載配置文件
- home = expanduser("~")
- with open(os.path.join(home,".ibot.yml")) as f:
- config = yaml.load(f)
- bosonnlp_token = config["token"]
(3)解析字符串
- def parse(self, query_string):
- """
- input:
- 1月12號 濟南到兗州的高鐵票
- output:
- [{'entity': [[0, 3, 'time'], [3, 4, 'location'], [5, 6, 'location']], # 需要理解實體出現的模式,這塊需要理解上下文
- 'tag': ['t', 'm', 'q', 'ns', 'p', 'ns', 'ude', 'n', 'n'],
- 'word': ['1月', '12', '號', '濟南', '到', '兗州', '的', '硬座', '票']}]
- """
- result = self.nlp.ner(query_string)[0]
- words = result['word']
- tags = result['tag']
- entities = result['entity']
- return (words,entities,tags)
(4)獲得已識別的實體
- def get_entity(self,parsed_words,index_tuple):
- """
- 獲取已識別的實體
- 采用filter
- 參考 python cookbook部分
- input:
- entities : 二元組
- parsed_words : 解析好的詞組
- """
- return parsed_words[index_tuple[0]:index_tuple[1]]
(5)元組重新命名
- def format_entities(self,entities):
- """
- 給元組命名
- """
- namedentity = collections.namedtuple('namedentity','index_begin index_end entity_name')
- return [namedentity(entity[0],entity[1],entity[2]) for entity in entities]
(6)獲取解析時間戳
- def get_format_time(self,time_entity):
- """
- output
- {'timestamp': '2018-12-20 23:30:29', 'type': 'timestamp'}
- """
- basetime = datetime.datetime.today()
- result = self.nlp.convert_time(
- time_entity,
- basetime)
- #print(result)
- timestamp = result["timestamp"]
- return timestamp.split(" ")[0]
https://github.com/zandaoguang/MissHome
如何調用?
- iquery 濟南 兗州 20190112
- ibot 本周天從濟南回老家兗州,幫我看下
- ibot 本周五從兗州出發,打算去北京撿垃圾,幫我看下有沒有車票
- ib 這周六從南京回武夷山老家,幫我看下車票
- ...
查詢結果并搶票
阿廣說
自從學了計算機,每逢思鄉之情冉冉升起,只能通過加快敲擊鍵盤的速度來忘記此時此刻的烽火三月、家書萬金。
盼望著,盼望著,寒假來了,春天的腳步近了。在我們童顏尚駐時,過年缺少不了的部門就是走親戚,有魚肉之果腹,亦有無案牘之勞形。可后來的后來,我們長大了,走親戚在無形之中成了一種“煩惱”。
我們累于東家跑西家躥;我們累于各類繁文縟節;我們累于各式尬聊;我們累于招呼熊孩子;我們累于送禮送紅包;我們累于各種解釋;我們累于被明里奚落、暗里鄙視;我們累于裝體面、撐面子。
明明生活不止眼前的茍且,還有往后余生的茍且,可礙于面子,我們依然裝作不但有詩和遠方,還要有錢途的樣子。
如果把過年比作愛情,那豈是:長街長,煙花繁,你挑燈回看;短亭短,紅塵輾,我把蕭再嘆?通俗點講,我愿用三生煙火,換你一張通往家鄉的火車票。