获取火车站

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. Windows Phone SDK update for Windows Phone 7.8
  2. 符合自己的德国学校与专业
  3. 如何在公共WiFi下保持安全?
  4. 【Android 系统开发】 Android 系统启动流程简介
  5. MyCat数据库分片
  6. linux+qt导入构建,如何在Qt Creator项目向导中添加自定义构建步骤?
  7. 设计模式之_动态代理_05
  8. 文档生成器 Xcode与Appledoc
  9. 计算机网络学习笔记(5. 电路交换)
  10. nginx cache配置
  11. Keil4 新建工程 和 烧录程序
  12. NFT 的潜力:扩展的艺术品鉴定证书
  13. 拉普拉斯矩阵(Laplacian matrix)及其变体详解
  14. 解密宝典——十招教你学会软件破解
  15. 如果遇到压力面试应该怎么办?应对压力面试有什么技巧?
  16. 在springboot中使用腾讯QQ邮箱发送邮件时出现的错误
  17. 为什么苹果4s用电信卡显示无服务器,电信4G卡插入苹果4S,提示“无服务”
  18. 深度学习—BP神经网络
  19. 计算机大写改成拼音形式,Excel将汉字名字,转换为大写的拼音,全称
  20. 2022-10-15(Linux应急响应、配置漏洞之DNS域传送、内网渗透之内网主机发现技巧)

热门文章

  1. es6 forEach/map循环中断
  2. 庄懂技术美术入门课笔记_L15_特效动态实现方式(UV流动UV扰动)
  3. 爱护乳腺,AI不宜迟--英特尔人工智能助力乳腺癌早筛及诊治
  4. 计算机二级经济订货批量公式,2015年计算机二级《Access》上机冲刺试题(2)
  5. C语言———指针进阶3
  6. 污水处理厂对耐酸碱污水流量计厂家的选型及安装调试
  7. Android仿miui11风格,分享一款MIUI11主题,圆润小清新风格,状态栏好评
  8. 无人机技术的发展与应用前景
  9. 液体色差仪检测药品溶液颜色的方法和原理
  10. php判断数组下标,php检查数组下标是否存在