Python 爬取12306火车票
获取火车站
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火车票相关推荐
- python爬火车票是不是违法_python利用selenium+requests+beautifulsoup爬取12306火车票信息...
在高速发展的时代.乘车出远门是必不可少的,有些查询信息是要收费的.这里打造免费获取火车票信息 想要爬取12306火车票信息,访问12306官方网站,输入出发地,目的地 ,时间 之后点击确定,这是我 ...
- 2021最新 python爬取12306列车信息自动抢票并自动识别验证码(三)购票篇
项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否则后果自行 ...
- 2021最新python爬取12306列车信息自动抢票并自动识别验证码
项目描述 项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否 ...
- python爬取12306列车信息自动抢票并自动识别验证码(一)列车数据获取篇
项目前言 自学python差不多有一年半载了,这两天利用在甲方公司搬砖空闲之余写了个小项目--[12306-tiebanggg-master].注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一 ...
- python爬取12306列车信息自动抢票并自动识别验证码(二)selenium登录验证篇
项目前言 自学python差不多有一年半载了,这两天利用在甲方公司搬砖空闲之余写了个小项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时 ...
- python 爬取12306数据
学了好久的 java 换个语言试试 就选择了 简单易学的python ,学了一段时间看到别人都在爬取12306网站的数据,我也尝试尝试,发现 12306网站的数据更新太快.返回的json数据变得越来 ...
- Python爬取12306车票信息
Python3爬取12306车票信息 第一次写爬虫,咱从入门级--12306车票爬取 开始 我们要爬取的信息是https://www.12306.cn/index/上的车票信息 当我们选择出发地和目的 ...
- 使用python爬取12306上面所有车次数据
在爬取12306之前需要做的工作就是: 1,分析请求过程 2,分析是否需要处理cookie 3,编写代码 4,测试爬取网站是否有访问次数限制 5,部署到正式服务器上 这里重点写 如何分析请求过程: 这 ...
- Python爬取12306(火车票分析助手)!
说明文字: 1.本项目只是一个练习,熟悉python爬虫技术,没有任何用途 2.最后运行的结果有时候会成功,有时候会显示错误界面,如下图所示.因为12306怎么可能允许你一直爬它呢 准备工作: 下载数 ...
最新文章
- Redis的这些拓展方案,用过一条的就是大牛!
- AI工程师面试知识点:机器学习算法类
- IBM Cloud Speech to Text 语音识别
- potential things for recommendation
- 《巫师 3:狂猎》:传统叙事在开放世界中的水土不服
- Spring开启注解AOP的支持放置的位置
- 在POJO中使用ThreadLocal的Java嵌套事务
- 计算机二级access模考软件_计算机二级考前通关大礼包来啦!各科目模考软件、视频教程,更有往年真题、最新考纲等打包送!...
- 四川大学java语言程序设计_四川大学2014年计算机(软件)学院Java语言设计期末考试B卷程序.doc...
- C++工作笔记-结构体与类的进一步探究(在C++中的结构体,非C语言结构体)
- 在gitLab上新建仓库push时SSHkey的问题
- 什么?华为方舟编译器竟然这么牛逼~
- 一图精通python3
- 思普linux安装教程,思普产品全生命周期管理系统_全生命周期管理_云市场-华为云...
- 手写字体研究-matlab
- python 抽奖库_用 python 写一个年会抽奖小程序
- 怎么制作一个蒙版效果
- Unity人工智能之不断自我进化的五人足球赛
- android系统相机的使用、及解决拍照闪退的问题
- 一级建造师可以跨省考试吗?