代码是在源代码的基础上进行的修改。希望对你有所帮助!

实现后如图所示:

首先我们需要抓取一些基础的数据,各大火车站信息!

import urllib

from urllib import request

import re

url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8955'

req = urllib.request.Request(url)

r = urllib.request.urlopen(req).read().decode('utf-8')

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

stations = dict(stations)

stations = dict(zip(stations.keys(),stations.values()))

上面的代码通过抓取,网页信息,返回一个字典数据:

stations = dict(zip(stations.keys(),stations.values()))#这行代码在后面进行了建值互换,这里没有进行过修改,这是原文的数据。

火车站的数据抓取成功,我们接下来抓取查询数据,代码如下:

from station import stations

import warnings

def change_date(d1) :

if '.' in d1 :

d1 = d1.replace('.', '-')

if not d1.startswith('0') :

d1 = str(0) + d1

if '-' in d1[-2] :

d1 = d1[:-1] + '0' + d1[-1]

return d1

def student_or_not(student) :

if 'y' in student[0].lower() :

return '0X00'

else :

return 'ADULT'

f1 = input('请输入开始城市:\n')

f = stations[f1]

t1 = input('请输入目的城市:\n')

t = stations[t1]

d1 = input('请输入出发时间:\n')

d = str('2018-') + change_date(d1)

student = input('是否为学生票,输入(yes/no)')

print('正在查询' + f1 + '至' + t1 + '的列车,请听听音乐......')

url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={d}&leftTicketDTO.from_station={f}&leftTicketDTO.to_station={t}&purpose_codes={student}'

url = url.format(f=f, d=d, t=t, student=student_or_not(student))

warnings.filterwarnings("ignore")

这里本人增加了两个函数 change_date() 和 student_or_not()

change_date()这个函数对用户输入日期的行为进行了简化,提高了用户体验,可以直接输入比如7.3这样的日期,其他的符号,我们可以自己进行扩展。

student_or_not()这个函数的作用是判断查询的是普通票还是学生票

美化显示,区分到站和出发站点的颜色,我们加入如下函数

def colored(color, text) :

table = {

'red' : '\033[91m',

'green' : '\033[92m',

'nc' : '\033[0m'

}

cv = table.get(color)

nc = table.get('nc')

return ''.join([cv, text, nc])

最后我们进行数据处理展示:

import requests

from get_urltrain import url

from prettytable import PrettyTable

from color_set import colored

from station import stations

def chair_lists(row_list) :

chair_list = []

for i in range(len(row_list) - 5, 21, -1) :

if row_list[i] != '' :

chair_list.append(row_list[i])

else :

chair_list.append('--')

return chair_list

headers = {

'user-agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'

}

r = requests.get(url, verify=False, headers=headers) # 请求网址1的内容

rows = r.json()['data']['result'] # 将内容解析为列表

trains = PrettyTable()

trains.field_names = ["车次", "车站", "时间", "历时", "商务座\特等座", "一等座", "二等座", "高级软卧", "软卧", "动卧", "硬卧 ", "软座 ", "硬座", "无座",

"其他"]

# 设置table的header

num = len(rows) # 打印列表的个数

# station1 = dict([v, k] for k, v in stations.items())

station_list = dict(zip(stations.values(), stations.keys()))

for row in rows : # 列表循环

row_list = row.split('|')

chair_list = chair_lists(row_list)

trains.add_row([row_list[3],

'\n'.join([colored('green', station_list[row_list[6]]),

colored('red', station_list[row_list[7]])]),

'\n'.join([colored('green', row_list[8]),

colored('red', row_list[9])]),

row_list[10],

] + chair_list)

print('查询结束,共有 %d 趟列车。' % num) # 列表个数也就是列车个数

print(trains)

这里我增加了 chair_lists()函数进行循环处理对应的表段

用于空数据替换成‘–'

station_list = dict(zip(stations.values(), stations.keys()))

#station_list 进行了建值互换方便下面的循环中的调用

trains.add_row([row_list[3],

'\n'.join([colored('green', station_list[row_list[6]]),

colored('red', station_list[row_list[7]])]),

'\n'.join([colored('green', row_list[8]),

colored('red', row_list[9])]),

row_list[10],

] + chair_list)

这个抓取案例我们可以举一反三,可以拓展很多功能,方便我们进行数据快速查询,比如展示价格等等!

源代码在:https://github.com/morganlions/train

总结

以上所述是小编给大家介绍的python3.X 抓取火车票信息【修正版】,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

本文标题: python3.X 抓取火车票信息【修正版】

本文地址: http://www.cppcns.com/jiaoben/python/230692.html

基于python提火车票信息_python3.X 抓取火车票信息【修正版】相关推荐

  1. 基于Python猫眼票房TOP100电影数据抓取

    基于Python猫眼票房TOP100电影数据抓取 使用requests库抓取数据 BeatifulSoup解析URL,将数据存入csv文件 处理数据,生成图表 本次爬取数据使用Python语言在jup ...

  2. 基于Python实现的微信好友数据分析——抓取好友性别、位置、头像签名

    最近微信迎来了一次重要的更新,允许用户对"发现"页面进行定制.不知道从什么时候开始,微信朋友圈变得越来越复杂,当越来越多的人选择"仅展示最近三天的朋友圈",大概 ...

  3. 基于Python爬虫的股票成交量数据抓取分析系统

    目录 数据获取 2 1.1. 实验环境搭建 2 1.2. 抓取数据 2 1.2.1. 新浪财经 3 1.2.2. 网易财经 6 1.2.3. 东方财富 12 1.2.4. TuShare (挖地兔) ...

  4. 如何用python抓取文献_浅谈Python爬虫技术的网页数据抓取与分析

    浅谈 Python 爬虫技术的网页数据抓取与分析 吴永聪 [期刊名称] <计算机时代> [年 ( 卷 ), 期] 2019(000)008 [摘要] 近年来 , 随着互联网的发展 , 如何 ...

  5. python爬虫代码房-Python爬虫一步步抓取房产信息

    原标题:Python爬虫一步步抓取房产信息 前言 嗯,这一篇文章更多是想分享一下我的网页分析方法.玩爬虫也快有一年了,基本代码熟悉之后,我感觉写一个爬虫最有意思的莫过于研究其网页背后的加载过程了,也就 ...

  6. 用python设计学生管理系统_基于python和tkinter实现的一个简单的学生信息管理系统...

    一个简单的学生信息管理系统基于python和tkinter 1.需求分析1.大学生信息管理系统使用tkinter接口创建一个窗口.使界面更漂亮.2. 实现与数据库的连接,教师和学生的信息可以保存或读取 ...

  7. 使用Python抓取网页信息

    之前用C#帮朋友写了一个抓取网页信息的程序,搞得好复杂,今天朋友又要让下网页数据,好多啊,又想偷懒,可是不想用C#了,于是想到了Python,大概花了两个小时,用记事本敲的,然后在IDLE (Pyth ...

  8. python爬取新浪微博数据中心_Python爬虫框架Scrapy实战之批量抓取招聘信息

    网络爬虫抓取特定网站网页的html数据,但是一个网站有上千上万条数据,我们不可能知道网站网页的url地址,所以,要有个技巧去抓取网站的所有html页面.Scrapy是纯Python实现的爬虫框架,用户 ...

  9. Python+Selenium自动搜索基金业协会指定企业名单,抓取指定信息并保存到数据库...

    Python+Selenium自动搜索基金业协会指定企业名单,抓取指定信息并保存到数据库.网址https://gs.amac.org.cn/amac-infodisc/res/pof/manager/ ...

  10. 机械臂论文笔记(一)【基于卷积神经网络的二指机械手 抓取姿态生成研究 】

    基于卷积神经网络的二指机械手 抓取姿态生成研究 论文下载 摘要 第1章 绪论 1.1 抓取生成国内外研究现状 1.1.1已知物体抓取生成 1.1.2相似物体抓取生成 1.1.3 未知物体抓取生成 1. ...

最新文章

  1. SAP QM 使用QP01事务代码真的不能创建含有Multiple Specification的检验计划
  2. 【LeetCode从零单排】No133. clon graph (BFS广度优先搜索)
  3. OCulus Rift 游戏开发六原则
  4. Hadoop 2.7集群环境搭建
  5. C++ 多线程使用future传递异常
  6. Bash游戏 V2(51Nod-1067)
  7. docker 安装 jdk,配置环境变量
  8. hdu 1003 Max Sum (DP)
  9. EasyUI:Parser 解析器
  10. innosetup 安装前、卸载前判断是否有进程正在运行转
  11. WebService入门(二)wsimport的使用
  12. 哔哩下载姬(B站下载工具)
  13. Qt系列文章之 Model/View 框架
  14. 问题 H: LZY碎大石
  15. 解决电脑插耳机声音外放
  16. 转圈加载html,web前端入门到实战:纯CSS实现加载转圈样式
  17. 我是歌手黄绮珊(黄妈)彭佳慧,
  18. 算法初步--什么是算法
  19. MATLAB图像去雾处理系统
  20. 人工智能领域的十大算法

热门文章

  1. Oracle9i数据库Data Guard实施及维护手册
  2. Linux vim 编辑文件底部显示[converted]解决办法
  3. 微信小程序加入购物车效果动画
  4. javafx-更改程序图标
  5. 亿阳信通图像处理工程师
  6. Linux下文件属性详解
  7. 2022软件测试常见抓包工具
  8. 计算机的时钟设置错误,谷歌浏览器用不了显示电脑时钟错误解决方法
  9. 易宝支付回调不成功问题解决
  10. 信息安全——非对称密码体制