获取火车站

stations.py

#import certifi
#import urllib3
import re
import requests
from pprint import pprinturl = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9001'
response = requests.get(url, verify=False)
stations = re.findall('([\u4e00-\u9fa5]+)\|([A-Z]+)',response.text)
print(dict(stations))
#pprint(dict(stations),indent=4)

根据出发地,目的地,时间查询

#!/usr/bin/env python
#coding:utf-8
"""命令行的火车票查看器
Usage:12306 [-gdtkz] <from> <to> <date>Options:-h,--help  显示帮助-g           高铁-d         动车-t         特快-k         快速-z         直达Example:12306 上海 北京 2016-12-1612306 -dg 上海北京 2016-12-16pip install requests prettytable docopt colorama
#prettytable格式化工具
#docopt是python3命令行的位置参数解析工具
#colorama是添加显示颜色"""
import requests
from docopt import docopt
import sys
#sys.path.append(r"/py/stations")
from stations import stations
import json
from prettytable import PrettyTableclass TrainsCollections:header = '车次 车站 时间 历时 一等 二等 软卧 硬卧 硬座 无座'.split()def __init__(self,available_tranins,options):self.available_tranins = available_traninsself.options = optionsdef _get_duration(self,raw_train):durations = raw_train.get('lishi').replace(':','小时') + '分'return durations#装饰器,把此函数定义为属性,以被别的函数调用
    @propertydef trains(self):for raw_train in self.available_tranins:train_no = raw_train['station_train_code']initial = train_no[0].lower()if not self.options or initial  in self.options:train = [train_no,'\n'.join([raw_train['from_station_name'],raw_train['to_station_name']]),'\n'.join([raw_train['start_time'],raw_train['arrive_time']]),self._get_duration(raw_train),raw_train['zy_num'],raw_train['ze_num'],raw_train['rw_num'],raw_train['yw_num'],raw_train['yz_num'],raw_train['wz_num'],]#print(train)#生成器,一次返回一项yield traindef pretty_print(self):pt = PrettyTable()pt._set_field_names(self.header)for train in self.trains:pt.add_row(train)print(pt)def cli():'''{'-d':True,'-g':True,'-k':False,'-t':False,'-z':False,'<date>':'2017-03-23','<from>':'海口','<to>':'北京'}'''arguments = docopt(__doc__)print(arguments)from_station = stations.get(arguments['<from>'])to_station = stations.get(arguments['<to>'])date = arguments['<date>']#获取参数,列表解析options = ''.join([k for k,v in arguments.items() if v is True])url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format(date,from_station,to_station)#url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'r = requests.get(url,verify=False)print(url)#jjj = json.loads(str(r))available_tranins1 = r.json()['data']available_tranins = []for available_tranins2 in available_tranins1:available_tranins.append(available_tranins2['queryLeftNewDTO'])#available_tranins = list(available_tranins.keys())# print(available_tranins)#TrainsCollections(available_tranins,options).pretty_print()#available_tranins = available_tranins2['queryLeftNewDTO']#print(available_tranins)#print(type(available_tranins[0]))
    TrainsCollections(available_tranins,options).pretty_print()if __name__ == '__main__':#TrainsCollections.cli()cli()

转载于:https://www.cnblogs.com/linyouyi/p/11409910.html

Python 爬取12306火车票相关推荐

  1. python爬火车票是不是违法_python利用selenium+requests+beautifulsoup爬取12306火车票信息...

    在高速发展的时代.乘车出远门是必不可少的,有些查询信息是要收费的.这里打造免费获取火车票信息 想要爬取12306火车票信息,访问12306官方网站,输入出发地,目的地  ,时间  之后点击确定,这是我 ...

  2. 2021最新 python爬取12306列车信息自动抢票并自动识别验证码(三)购票篇

    项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否则后果自行 ...

  3. 2021最新python爬取12306列车信息自动抢票并自动识别验证码

    项目描述 项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否 ...

  4. python爬取12306列车信息自动抢票并自动识别验证码(一)列车数据获取篇

    项目前言 自学python差不多有一年半载了,这两天利用在甲方公司搬砖空闲之余写了个小项目--[12306-tiebanggg-master].注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一 ...

  5. python爬取12306列车信息自动抢票并自动识别验证码(二)selenium登录验证篇

    项目前言 自学python差不多有一年半载了,这两天利用在甲方公司搬砖空闲之余写了个小项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时 ...

  6. python 爬取12306数据

    学了好久的 java  换个语言试试 就选择了 简单易学的python ,学了一段时间看到别人都在爬取12306网站的数据,我也尝试尝试,发现 12306网站的数据更新太快.返回的json数据变得越来 ...

  7. Python爬取12306车票信息

    Python3爬取12306车票信息 第一次写爬虫,咱从入门级--12306车票爬取 开始 我们要爬取的信息是https://www.12306.cn/index/上的车票信息 当我们选择出发地和目的 ...

  8. 使用python爬取12306上面所有车次数据

    在爬取12306之前需要做的工作就是: 1,分析请求过程 2,分析是否需要处理cookie 3,编写代码 4,测试爬取网站是否有访问次数限制 5,部署到正式服务器上 这里重点写 如何分析请求过程: 这 ...

  9. Python爬取12306(火车票分析助手)!

    说明文字: 1.本项目只是一个练习,熟悉python爬虫技术,没有任何用途 2.最后运行的结果有时候会成功,有时候会显示错误界面,如下图所示.因为12306怎么可能允许你一直爬它呢 准备工作: 下载数 ...

最新文章

  1. Redis的这些拓展方案,用过一条的就是大牛!
  2. AI工程师面试知识点:机器学习算法类
  3. IBM Cloud Speech to Text 语音识别
  4. potential things for recommendation
  5. 《巫师 3:狂猎》:传统叙事在开放世界中的水土不服
  6. Spring开启注解AOP的支持放置的位置
  7. 在POJO中使用ThreadLocal的Java嵌套事务
  8. 计算机二级access模考软件_计算机二级考前通关大礼包来啦!各科目模考软件、视频教程,更有往年真题、最新考纲等打包送!...
  9. 四川大学java语言程序设计_四川大学2014年计算机(软件)学院Java语言设计期末考试B卷程序.doc...
  10. C++工作笔记-结构体与类的进一步探究(在C++中的结构体,非C语言结构体)
  11. 在gitLab上新建仓库push时SSHkey的问题
  12. 什么?华为方舟编译器竟然这么牛逼~
  13. 一图精通python3
  14. 思普linux安装教程,思普产品全生命周期管理系统_全生命周期管理_云市场-华为云...
  15. 手写字体研究-matlab
  16. python 抽奖库_用 python 写一个年会抽奖小程序
  17. 怎么制作一个蒙版效果
  18. Unity人工智能之不断自我进化的五人足球赛
  19. android系统相机的使用、及解决拍照闪退的问题
  20. 一级建造师可以跨省考试吗?

热门文章

  1. 大鱼吃小鱼游戏-mom.js
  2. CSS实现磨砂玻璃(毛玻璃)效果样式
  3. .NET 将多个程序集合并成单一程序集的 4+3 种方法
  4. Aurix TC3xx系列MCU GTM模块介绍
  5. pymysql无法 安装与导包
  6. 灵性图书馆:好书推荐-《觉悟自我的科学》
  7. 用pytorch实现一个简单的图像分类器
  8. 怎么查看mysql的库名_如何查看数据库名呢?
  9. 百度云曲显平:AIOps时代下如何用运维数据系统性地解决运维问题? 1
  10. 流媒体音视频参数概念及详解