c语言编程笔录

您现在的位置是:首页 > 编程 > 编程经验

编程经验

python解最低票价python火车票票价

张姿妤 2023-07-12编程经验
第一段:最低票价的解决方案解决最低票价问题需要我们通过爬虫获取到火车票的所有价格并选择最便宜的一张。这里我们可以使用Python爬虫和正则表达式的组合。importrequestsimportreurl=""#构造请求头和代

第一段:最低票价的解决方案

解决最低票价问题需要我们通过爬虫获取到火车票的所有价格并选择最便宜的一张。这里我们可以使用 Python 爬虫和正则表达式的组合。

import requests
import re

url = "https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2021-05-15&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT"

# 构造请求头和代理,模拟浏览器访问
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {'http': 'http://localhost:1080', 'https': 'http://localhost:1080'}

# 发送请求
response = requests.get(url, headers=headers, proxies=proxies)

# 提取车次和票价信息
pattern = re.compile('"station_train_code":"(.*?)".*?"ze_num":"(.*?)".*?"zy_num":"(.*?)".*?"dw_num":"(.*?)".*?"gr_num":"(.*?)".*?"rw_num":"(.*?)".*?"yw_num":"(.*?)".*?"rz_num":"(.*?)".*?"yz_num":"(.*?)"', re.S)
result = re.findall(pattern, response.text)

# 打印结果
for item in result:
    train_number = item[0]
    price_list = [int(x) for x in item[1:] if x not in ['--', '']]
    print(train_number, min(price_list))

上面的代码会输出火车票中的所有车次和价格,我们只需要获取到所有车票价格的最小值即可。

第二段:火车票票价的获取方案

获取每张火车票的价格所涉及到的数据比获取最低票价的数据要多一些,我们需要按照购买日期、车次号、车站等参数来构造请求链接。这里我们仍然可以利用 Python 爬虫实现这个功能。

import requests
import json

# 构造请求链接
url = "https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice"
parameters = {
    "train_no": "4l000D352040",
    "from_station_no": "01",
    "to_station_no": "04",
    "seat_types": "OWZ",
    "train_date": "2021-05-15",
}

# 构造请求头和代理,模拟浏览器访问
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {'http': 'http://localhost:1080', 'https': 'http://localhost:1080'}

# 发送请求
response = requests.get(url, params=parameters, headers=headers, proxies=proxies)

# 提取车票价格信息
data = json.loads(response.text)
price_list = data['data']['A9']
print(price_list)

在上面的代码中,我们需要构造一个名为 parameters 的字典作为请求参数,里面包含了train_no、from_station_no、to_station_no、seat_types 和 train_date 等参数。根据这些参数构造出请求链接,然后发送请求并解析返回值中的数据即可。

第三段:程序的用途和规范分析

这个程序的用途是获取火车票的价格信息,可以用于建立火车票价格查询网站或者火车票购买网站的功能实现。使用该程序需要满足以下规范:

  • 使用爬虫抓取信息必须遵守网站的规定,并遵守法律法规
  • 程序运行时需要构造请求头和代理,模拟浏览器的行为,防止被网站禁止访问
  • 数据爬取后需要进行解析和处理,确保数据的准确性和完整性
  • 程序要充分考虑异常情况的处理,例如网络不稳定或者网站停机等情况

第四段:程序的优化和改进方案

该程序可以进行以下方面的优化和改进:

  • 增加数据存储功能,将获取到的数据保存下来,方便后期分析和使用
  • 优化爬虫的性能,使用多线程或者异步IO的方式提高数据抓取的速度
  • 采用商业API的方式获取票价信息,减少爬虫程序被封禁的风险
  • 考虑如何将程序应用到公共交通、旅游等领域,扩大应用范围

文章评论