Python 解析爬取的车次数据(12306)
背景
在完成数据分析、挖掘的过程中,通过各种途径获取到的源数据有时候是不能直接利用的,需要再做进一步加工、处理、解析等操作,以致得到最终的目标结果。
1 获取源数据
- 使用 Python 从 12306 网站下载车次数据。数据地址(URL)
- 下载代码:
- 执行环境:Jupyter Notebook
import re
import json
import requests
import pandas as pd'''
下载所有的车次数据 | 保存为 tnumber_datas.txt 文件
'''
def download_tnumber_datas(tn_datas_url): requests.adapters.DEFAULT_RETRIES = 5 response = requests.get(tn_datas_url, stream=True,verify=False) status = response.status_code if status == 200: with open('tnumber_datas.txt', 'wb') as tfile: for chunk in response.iter_content(chunk_size=102400): # 成块读取数据if chunk: tfile.write(chunk) tn_datas_url='https://kyfw.12306.cn/otn/resources/js/query/train_list.js?scriptVersion=1.0'
download_tnumber_datas(tn_datas_url);
- 代码效果:
2 解析数据
- 数据格式:
var train_list = {"2017-11-17" : { "D" : [{ "station_train_code":"D1(北京-沈阳)", "train_no":"24000000D10W" }, ... ]}}
- 数据大小(file_size ≈\approx 20M = 20467857 B)
2.1 问题
- 如何利用 Python 解析大文件?
- 利用 Python 进行本地数据处理(解析),数据量限度范围(多少数据量合适)。【待总结】
- 利用 Python 等语言处理大文件数据的方式(方法)总结。【待总结】
2.2 解析代码
2.2.1 代码解析
'''
解析下载的的车次数据(近1个月) | 数据来源于12306(js 文件)
'''
def parse_datas_of_train_number(file_path):text=open(file_path).read() # 1 读取目标数据文件dts=re.findall('"([0-9]{4}-[0-9]{0,2}-[0-9]{0,2})":\{',text) # 2 解析出所有的日期(key)train_list=re.findall(r'=(.*)',text)[0] # 3 解析出数据train_json=json.loads(train_list) # 4 将数据载入字典trains=[] # 存储结果数据for dt in dts:tjson_dt=train_json.get(dt) # 所有日期keys=tjson_dt.keys() # 所有的车次类型,C,D,G,K,O,T,Zfor key in keys:dicts=tjson_dt.get(key) # 取出对应类型的车次数据for dic in dicts:station_train_code=dic.get('station_train_code')train_no=dic.get('train_no')trains.append([dt,station_train_code,key,train_no])return trains # 返回结果列表
2.2.2 数据持久化
trains=parse_datas_of_train_number('./tnumber_datas.txt') # 源数据文件路径(第一步的下载数据)
trains_df=pd.DataFrame(trains)
trains_df.columns=['dt','station_train_code','train_type','train_no']trains_df.to_csv('tnumber_datas.csv',encoding='utf8') # 将数据持久化至 tnumber_datas.csv 文件中
2.2.3 数据结果简析
3 解析代码
总结
通过以上操作步骤,可以得到 csv 格式的车次数据,该份数据在进行Python 开发过程中,使用起来会更方便(加载、持久化等),从而提高效率。
源代码 [码云]
参考文章: 使用python爬取12306上面所有车次数据
- 注:该博文所解决的问题参考文章中并没有提供解析的方法,解析代码属原创代码;有关利用 Python 处理大文件的文章后则会后续更新。
Python 解析爬取的车次数据(12306)相关推荐
- python+appium爬取微信运动数据,并分析好友的日常步数情况
python+appium爬取微信运动数据,并分析好友的日常步数情况 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python+appium爬取微信运动数据,并 ...
- python为啥爬取数据会有重复_利用Python来爬取“吃鸡”数据,为什么别人能吃鸡?...
原标题:利用Python来爬取"吃鸡"数据,为什么别人能吃鸡? 首先,神装镇楼 背景 最近老板爱上了吃鸡(手游:全军出击),经常拉着我们开黑,只能放弃午休的时间,陪老板在沙漠里奔波 ...
- Python+Selenium爬取新浪微博评论数据
Python+Selenium爬取指定新浪微博的数据 微博分析 微博端类型 选择爬取对象 Ajax动态加载数据分析 Python实现代码 微博分析 微博端类型 首先找到一个待爬取的微博,需要注意的是, ...
- python爬取网页代码-python爬虫爬取网页所有数据详细教程
Python爬虫可通过查找一个或多个域的所有 URL 从 Web 收集数据.Python 有几个流行的网络爬虫库和框架.大家熟知的就是python爬取网页数据,对于没有编程技术的普通人来说,怎么才能快 ...
- python爬虫爬取58网站数据_Python爬虫,爬取58租房数据 字体反爬
Python爬虫,爬取58租房数据 这俩天项目主管给了个爬虫任务,要爬取58同城上福州区域的租房房源信息.因为58的前端页面做了base64字体加密所以爬取比较费力,前前后后花了俩天才搞完. 项目演示 ...
- 如何利用Python批量爬取人民币外汇数据并整理储存可视化!
一.需求 由于该网站(http://www.safe.gov.cn/safe/rmbhlzjj/index.html)日期选择最长间隔只能90天,因此如果手动点击下载表格,需要多次选择日期,并且将多个 ...
- python 爬虫 表格,python爬虫爬取网页表格数据
用python爬取网页表格数据,供大家参考,具体内容如下 from bs4 import BeautifulSoup import requests import csv import bs4 #检查 ...
- python爬虫 爬取斗鱼直播数据
from time import sleepimport requests from bs4 import BeautifulSoup# 爬取分类页面数据 #获取斗鱼分类页面数据 def get_di ...
- Selenium实战之Python+Selenium爬取京东商品数据
实战目标:爬取京东商品信息,包括商品的标题.链接.价格.评价数量. 代码核心在于这几个部分: 其一:使用元素定位来获取页面上指定需要抓取的关键字: 其二:将页面上定位得到的数据永久存储到本地文件中. ...
最新文章
- 恍然大悟之原、反、补
- SVN服务器几种备份策略---重点svnsync备份---OK
- 2021-06-04
- linux系统时区设置
- 如何求欧拉函数~转载
- php mysql 执行sql文件_PHP执行SQL文件并将SQL文件导入到数据库_PHP
- DevOps面试问题
- 盒子模型阴影设置,爱奇艺阴影配置
- 服务器安全证书更新失败怎么回事,手机安全证书更新失败怎么回事
- 四川长虹招聘机器视觉、图像识别工程师
- 史上最全Redis面试题(2020最新版)
- VmWare工作笔记001---弹出错误提示无法连接mks:套接字连接尝试次数太多
- 无网络环境下安装Dynamics CRM
- python爬虫之伪装浏览器
- SSH访问远程主机超时问题解决
- 深入Linux文件系统
- PJzhang:python快速搭建局域网文件共享服务器
- vue router hash和history的区别_react-router-v4
- java sort排序函数
- 发现一个导致Arduino无法打开串口监视器问题
热门文章
- 基于circom、snarkjs实现零知识证明不透漏具体地理位置的区域监控
- 错误: tensorflow:Early stopping conditioned on metric `val_accuracy` which is not available
- PL3366C-ASEMI移动电源管理IC
- Java处理MP3资料
- 什么是淘宝私域流量?和公域流量流量有何区别?
- 数字证书及其简单数字签名的实现(java实现)
- 现代存储架构:磁带存储在数据中心重生
- 磁带存储发展趋势浅析
- (整理)吊炸天的CNNs,这是我见过最详尽的图解!(下)
- PTA 租用游艇问题