当前位置: 首页 > news >正文

下载站名文件

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

得到了请求地址与请求参数后,可以发现请求参数中的出发地与目的地均为车站名的英文缩写。而这个英文缩写的字母是通过输入中文车站名转换而来的,所以需要在网页中仔细查找是否有将车站名自动转换为英文缩写的请求信息,具体步骤如下:

(1)关闭并重新打开网络监视器,然后按下快捷键<F5>进行余票查询网页的刷新,此时在网络监视器中选择类型为js的网络请求。在文件类型中仔细分析文件内容是否有,与车站名相关的信息如图30所示。

图30  找到与车站名相关信息

说明:在分析信息位置时,查询按钮仅仅实现了发送查票的网络请求,而并没有发现将文字转换为车站名缩写的相关处理,此时可以判断在进入余票查询页面时就已经得到了将车站名转换为英文缩写的相关信息,所以可以刷新页面查看网络监视器中的网络请求。

(2)选中与车站名相关的网络请求,在请求细节中找到该请求的完整地址。然后在网页中打开该地址测试返回数据,如图31所示。

图31  返回车站名英文缩写信息

说明:看到返回的车站名信息,此时可以确认根据该信息可以进行车站名汉字与对应的英文缩写进行转换。例如,可以在该条信息中找到北京对应的是BJP。由于该条信息并没有自动转换的功能,所以需要将该信息以文件的方式保存在项目中。当需要转换时在文件中查找对应的英文缩写即可。

(3)打开PyCharm开发工具,在check tickets目录中右键菜单依次选择New → Python File,创建一个名称为get_stations.py文件,然后在菜单栏中依次选择File → Default Settings,再参考14.4.2小节中的步骤(4)、步骤(5)安装requests模块即可。

(4)在get_stations.py文件中分别导入requests模块、re模块及os模块,然后创建getStation()方法,该方法用于发送获取地址信息的网络请求,并将返回的数据转换为需要的类型。关键代码如下:

def getStation():

    # 发送请求获取所有车站名称,通过输入的站名转换为查询地址的参数

    url = 'https://kyfw.12306.cn/otn/resources/js/framework/

    station_name.js?station_version=1.9050'

    response = requests.get(url, verify=True)          # 请求并进行验证

    # 获取需要的车站名称

    stations = re.findall('([\u4e00-\u9fa5]+)\|([A-Z]+)', response.text)

    stations = dict((stations))                  # 转换为字典类型

    stations = str(stations)                        # 转换为字符串类型否则无法写入文件

    write(stations)                                  # 调用写入方法

说明:requests模块为第三方模块,该模块主要用于处理网络请求;re模块为Python自带的模块,主要通过正则表达式匹配并处理相应的字符串;os模块为Python自带的模块,主要用于判断某个路径下的某个文件。

注意:随着12306官方网站的更新,请求地址会发生改变,要以当时获取的地址为准。

(5)分别创建write()方法、read()方法及isStations()方法,分别用于写入文件、读取文件以及判断车站文件是否存在,代码如下:

def write(stations):

    file = open('stations.text', 'w', encoding='utf_8_sig')    # 以写模式打开文件

    file.write(stations)                      # 写入文件

    file.close()

def read():

    file = open('stations.text', 'r', encoding='utf_8_sig')    # 以写模式打开文件

    data = file.readline()                      # 读取文件

    file.close()

    return data

defisStations():

    isStations = os.path.exists('stations.text')          # 判断车站文件是否存在

    return isStations

(6)打开window.py文件,首先导入get_stations文件下的所有方法,然后在模拟python的程序入口处修改代码。接下来判断是否存在所有车站信息的文件,如果没有该文件就下载车站信息的文件然后显示窗体,如果存在将直接显示窗体即可。修改后代码如下:

from get_stations import *          # 导入get_stations文件下的所有方法

if __name__ == "__main__":

    ifisStations() == False:      # 判断是否存在所有车站的文件,没有就下载,有就直接显示窗体

        getStation()          # 下载所有车站文件

        show_MainWindow()          # 调用显示窗体的方法

    else:

        show_MainWindow()          # 调用显示窗体的方法

(7)在window.py文件下,单击右键菜单中选择“Run 'window'”菜单运行主窗体,主窗体界面显示后在check tickets目录下将自动下载stations.text文件,如图32所示,通过该文件可以实现车站名称与对应的英文缩写进行转换。

图32  下载stations.text文件

http://www.lryc.cn/news/373173.html

相关文章:

  • 345453
  • Java操作redis
  • 【数据结构(邓俊辉)学习笔记】图03——拓扑排序
  • C#参数使用场景简要说明
  • 线性代数|机器学习-P10最小二乘法的四种方案
  • 【Android面试八股文】你能描述一下JVM中的类加载过程吗?
  • MYSQL八、MYSQL的SQL优化
  • 鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS
  • 【ARMv8/ARMv9 硬件加速系列 3 -- SVE 指令语法及编译参数详细介绍】
  • Java版+ SaaS应用+接口技术RESTful API 技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开
  • 工业机器人远程运维,增强智慧工厂运营管理
  • 理解Python的元类
  • web前端黑马下载:探索学习资源的海洋
  • 最新版jd-gui下载
  • (051)FPGA时钟--->(001)时钟介绍
  • Java程序员英语单词通关:
  • 数据库开发-Mysql03
  • 0-1 背包问题(动态规划 查询背包元素)
  • elasticsearch快照生成与恢复
  • 178.二叉树:最大二叉树(力扣)
  • 跨境电商中的IP隔离是什么?怎么做?
  • 【C++】stack、queue和deque的使用
  • 通过SSH远程登录华为设备
  • 算法day27
  • 记录一次CTF图片拼图安装工具montage+gaps成功步骤以及踩坑全过程
  • 深入剖析人才管理的关键要素:“选、用、育、留”四大核心要素
  • 【C++】类的默认成员函数
  • 归并排序!
  • 深入探讨:Spring与MyBatis中的连接池与缓存机制
  • [C#]使用C#部署yolov10的目标检测tensorrt模型