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怎么可能允许你一直爬它呢 准备工作: 下载数 ...
最新文章
- Windows Phone SDK update for Windows Phone 7.8
- 符合自己的德国学校与专业
- 如何在公共WiFi下保持安全?
- 【Android 系统开发】 Android 系统启动流程简介
- MyCat数据库分片
- linux+qt导入构建,如何在Qt Creator项目向导中添加自定义构建步骤?
- 设计模式之_动态代理_05
- 文档生成器 Xcode与Appledoc
- 计算机网络学习笔记(5. 电路交换)
- nginx cache配置
- Keil4 新建工程 和 烧录程序
- NFT 的潜力:扩展的艺术品鉴定证书
- 拉普拉斯矩阵(Laplacian matrix)及其变体详解
- 解密宝典——十招教你学会软件破解
- 如果遇到压力面试应该怎么办?应对压力面试有什么技巧?
- 在springboot中使用腾讯QQ邮箱发送邮件时出现的错误
- 为什么苹果4s用电信卡显示无服务器,电信4G卡插入苹果4S,提示“无服务”
- 深度学习—BP神经网络
- 计算机大写改成拼音形式,Excel将汉字名字,转换为大写的拼音,全称
- 2022-10-15(Linux应急响应、配置漏洞之DNS域传送、内网渗透之内网主机发现技巧)
热门文章
- es6 forEach/map循环中断
- 庄懂技术美术入门课笔记_L15_特效动态实现方式(UV流动UV扰动)
- 爱护乳腺,AI不宜迟--英特尔人工智能助力乳腺癌早筛及诊治
- 计算机二级经济订货批量公式,2015年计算机二级《Access》上机冲刺试题(2)
- C语言———指针进阶3
- 污水处理厂对耐酸碱污水流量计厂家的选型及安装调试
- Android仿miui11风格,分享一款MIUI11主题,圆润小清新风格,状态栏好评
- 无人机技术的发展与应用前景
- 液体色差仪检测药品溶液颜色的方法和原理
- php判断数组下标,php检查数组下标是否存在