python爬虫实现火车票余票查询
获取终端输入的命令行参数
例如:python3 tickets.py -dg 成都 南京 2016-10-10
,包含车次类型,发站与终止站,以及日期,我们通过docopt这个包中的工具来解析命令行,如下,我们将命令行的参数存入了arguments变量当中,它是一个字典。
Usage:
tickets [-gdtkz] <from> <to> <date>
Options:
-h,--help 显示帮助菜单
-g 高铁
-d 动车
-t 特快
-k 快速
-z 直达
Example:
tickets 北京 上海 2016-10-10
tickets -dg 成都 南京 2016-10-10
"""
from docopt import docopt
def cli():
"""command-line interface"""
arguments = docopt(__doc__)
if __name__ == '__main__':
cli()
由于显示的时候需要显示火车代号,所以,需要获取火车代号。在12306网站中获取了关于station信息的网页链接,例如view-source:https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9101
,里面包含所有车站名称和代号等信息,利用正则表达式匹配出station_name中的中文([\u4e00-\u9fa5]
以及火车代号([A-Z]
)。
重构请求url,解析返回的json数据
当我们输入好站点信息,查询火车票时,会向服务器产生url请求链接,我们需要根据12306网站的url格式再加上命令行输入的站点信息,构造出我们自己的url,并产生请求。
服务器的响应格式为json格式,我们需要从中解析出我们需要的信息,该信息存储在json的result变量当中,解析该变量,具体如下: