用Python实现一个简单好用的12306查票系统
春节快到了,又要到一年中紧张刺激的时候了!
买票回家!
今天教大家想做一个简单好用的查票系统!
本次用到环境和模块
环境:
- Python 3.6
- Pycharm
模块
- requests
- pandas
- json
模块在cmd里pip install +模块名 就可以安装好了
基本思路:
一. 这些数据内容是从哪里的?
通过开发者工具进行抓包分析, 分析具体的数据是从哪里的
可以通过用搜索 你想要数据内容, 会给你返回相应的数据
二. 代码实现步骤
确定需求 >>> 发送请求 >>> 获取数据 >>> 解析数据 >>> 保存数据
- 发送请求, 对于相应的数据包url地址发送请求
- 获取数据, 获取响应体json字典数据
- 解析数据, 直接通过键值对提取数据
- 数据展示
代码
import requests # 数据请求模块 pip install requests
import pprint # 格式化输出的模块
import pandas as pd # pip install pandas
import json
f = open('city.json', mode='r', encoding='utf-8')
text = f.read()
city_json = json.loads(text)
# dit = dict(text)
# <class 'str'> 字符串转字典 json
while True:from_station = input('请输入出发的城市: ')to_station = input('请输入目的城市: ')# date = input('请输入查询时间(格式: 2021-09-10): ')# print(city_json[from_station])# print(city_json[to_station])# print(type(city_json))# 模块安装# win + R 输入cmd pip install requests# 发送请求# url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2021-09-11&leftTicketDTO.from_station=CSQ&leftTicketDTO.to_station=LZZ&purpose_codes=ADULT'url = 'https://kyfw.12306.cn/otn/leftTicket/query'# 字典的形式 ? 非贪婪匹配data = {'leftTicketDTO.train_date': '2021-09-11','leftTicketDTO.from_station': city_json[from_station],'leftTicketDTO.to_station': city_json[to_station],'purpose_codes': 'ADULT',}# 请求头是什么? 作用是什么? 为什么要加# 作用是什么 伪装浏览器 (把python代码伪装成浏览器对于发送请求)# headers User-Agent: 浏览器基本信息# Cookie 用户信息 host 域名 referer 防盗链# 比如 笔趣阁 表情包网站 你都可以不加headers (对某些网站)headers = {'Cookie': '*','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36'}# <Response [200]> 返回的是响应体对象 <> 表示对象 200[状态码]表示请求成功# 请求参数 params: get请求传递的请求参数 data: post请求需要提交表单response = requests.get(url=url, params=data, headers=headers)response.encoding = response.apparent_encoding# 如果服务器给我们返回的响应体数据 {} 完整的 可以直接获取json字典数据# result = response.json()['data']['result']# pprint.pprint(response.json())# print(response.text)# 解析数据 根据键值对进行取值 根据冒号左边的内容 提取冒号右边的内容# json 和 字典 数据类型是一样的 json是一种数据存储的格式result = response.json()['data']['result']lis = []for index in result[1:]:# 字符串分割方法index_list = index.replace('有', 'Yes').replace('无', 'No').split('|') # 返回的列表 可以根据索引位置提取内容page = 0Num = index_list[3] # 车次time_1 = index_list[8] # 发车时间time_2 = index_list[9] # 到达时间prince_seat = index_list[32] # 特等座first_class_seat = index_list[31] # 一等座second_class = index_list[30] # 二等座Wz = index_list[26] # 无座Yz = index_list[29] # 硬座Rw = index_list[23] # 软卧Yw = index_list[28] # 硬卧dit = {'Num': Num,'Start': time_1,'End': time_2,'Top':prince_seat,'First':first_class_seat,'Second':second_class,'Wz': Wz,'Yz': Yz,'Rw': Rw,'Yw': Yw,}lis.append(dit)# print(dit)pd.set_option('display.max_rows', None)columns = ['Num', 'Start', 'End', 'Top', 'First', 'Second', 'Yz', 'Wz', 'Rw', 'Yw']content = pd.DataFrame(lis, columns=columns)print(content)
实现效果:
喜欢记得点赞评论哦!
结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!
Python基础入门教程推荐:←点击左边蓝色文字就可以跳转观看了
Python爬虫案例教程推荐:←点击左边蓝色文字就可以跳转观看了
用Python实现一个简单好用的12306查票系统相关推荐
- python学费12306_python【练手】12306查票
[Python] 纯文本查看 复制代码# coding:utf-8 import json import requests import urllib3 import os import pickle ...
- python界面设计-手把手教你用Python设计一个简单的命令行界面
原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...
- python游戏最简单代码-如何利用Python开发一个简单的猜数字游戏
前言 本文介绍如何使用Python制作一个简单的猜数字游戏. 游戏规则 玩家将猜测一个数字.如果猜测是正确的,玩家赢.如果不正确,程序会提示玩家所猜的数字与实际数字相比是"大(high)&q ...
- python推荐系统-利用python构建一个简单的推荐系统
摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...
- 怎么用python编简单游戏_用Python实现一个简单的算术游戏详解
用Python实现一个简单的算术游戏 #!/usr/bin/env python from operator import add, sub from random import randint, c ...
- 【Python】如何用python做一个简单的输入输出交互界面?
看到知乎上有人在问,如何使用Python做一个简单的输入输出交互界面? 交互界面就涉及到GUI编程. Python有很多GUI框架,功能大同小异. 其中比较出名的有「PyQT」.**wxPython. ...
- 基于python的系统构建_利用python构建一个简单的推荐系统
摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...
- java调python 监控_利用Python实现一个简单的系统监控图表
作为运维人员,想必大家肯定都做过这样的事情:为了监控系统资源使用情况,开了若干个窗口,来回切换看输出: 只要我切得够快,性能异常点就逃不过我的眼睛! 这个时候你要是有个监控工具自然是很好的,例如我们美 ...
- python代理池_用Python搭建一个简单的代理池
其实每次爬东西的时候,特怕IP被封,所以每次都要把时间延迟设置得长一点...这次用Python搭建一个简单的代理池.获取代理IP,然后验证其有效性.不过结果好像不是很理想,为什么西刺代理的高匿代理都能 ...
最新文章
- Python搭建Keras CNN模型破解网站验证码
- CentOS部署JAVA程序、安装Tomcat以及安装导入mysql文件的方法
- 去除Coding4Fun中MessagePrompt的边框(Border)
- LeetCode-位运算-36. 只出现一次的数字
- GridSearchCV与RandomizedSearchCV
- 为技术匠人打call!用匠人精神,打造技术文化
- HTML5中常见的列表标签包括,介绍几个常用的HTML5标签
- require引入js vue_请教 关于使用require 引入vue 和公共js的问题
- 【Python学习】 - sklearn学习 - 评估指标precision_score的参数说明
- 设计模式学习总结——工厂模式
- 移动端 js 弹出层内容滚动的时候,不影响body的滚动条处理
- middleware什么意思_middleware
- LSTM神经网络图解
- android psd预览图软件,来自psd的Android Vector drawable具有空预览
- python断言语句的语法_Python断言教程
- Vue父组件传参数给子组件时,页面崩溃或者报undefined或者数据为空或者执行了两遍
- 杜甫水平最高的10首五律
- Excel添加下拉按键自动填充颜色
- use ida6.8 + windbg on win10
- 【python机器学习】——patsy的简介、安装、使用方法之详细攻略