背景

在完成数据分析、挖掘的过程中,通过各种途径获取到的源数据有时候是不能直接利用的,需要再做进一步加工、处理、解析等操作,以致得到最终的目标结果。


1 获取源数据

  • 使用 Python12306 网站下载车次数据。数据地址(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)相关推荐

  1. python+appium爬取微信运动数据,并分析好友的日常步数情况

    python+appium爬取微信运动数据,并分析好友的日常步数情况 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python+appium爬取微信运动数据,并 ...

  2. python为啥爬取数据会有重复_利用Python来爬取“吃鸡”数据,为什么别人能吃鸡?...

    原标题:利用Python来爬取"吃鸡"数据,为什么别人能吃鸡? 首先,神装镇楼 背景 最近老板爱上了吃鸡(手游:全军出击),经常拉着我们开黑,只能放弃午休的时间,陪老板在沙漠里奔波 ...

  3. Python+Selenium爬取新浪微博评论数据

    Python+Selenium爬取指定新浪微博的数据 微博分析 微博端类型 选择爬取对象 Ajax动态加载数据分析 Python实现代码 微博分析 微博端类型 首先找到一个待爬取的微博,需要注意的是, ...

  4. python爬取网页代码-python爬虫爬取网页所有数据详细教程

    Python爬虫可通过查找一个或多个域的所有 URL 从 Web 收集数据.Python 有几个流行的网络爬虫库和框架.大家熟知的就是python爬取网页数据,对于没有编程技术的普通人来说,怎么才能快 ...

  5. python爬虫爬取58网站数据_Python爬虫,爬取58租房数据 字体反爬

    Python爬虫,爬取58租房数据 这俩天项目主管给了个爬虫任务,要爬取58同城上福州区域的租房房源信息.因为58的前端页面做了base64字体加密所以爬取比较费力,前前后后花了俩天才搞完. 项目演示 ...

  6. 如何利用Python批量爬取人民币外汇数据并整理储存可视化!

    一.需求 由于该网站(http://www.safe.gov.cn/safe/rmbhlzjj/index.html)日期选择最长间隔只能90天,因此如果手动点击下载表格,需要多次选择日期,并且将多个 ...

  7. python 爬虫 表格,python爬虫爬取网页表格数据

    用python爬取网页表格数据,供大家参考,具体内容如下 from bs4 import BeautifulSoup import requests import csv import bs4 #检查 ...

  8. python爬虫 爬取斗鱼直播数据

    from time import sleepimport requests from bs4 import BeautifulSoup# 爬取分类页面数据 #获取斗鱼分类页面数据 def get_di ...

  9. Selenium实战之Python+Selenium爬取京东商品数据

    实战目标:爬取京东商品信息,包括商品的标题.链接.价格.评价数量. 代码核心在于这几个部分: 其一:使用元素定位来获取页面上指定需要抓取的关键字: 其二:将页面上定位得到的数据永久存储到本地文件中. ...

最新文章

  1. 恍然大悟之原、反、补
  2. SVN服务器几种备份策略---重点svnsync备份---OK
  3. 2021-06-04
  4. linux系统时区设置
  5. 如何求欧拉函数~转载
  6. php mysql 执行sql文件_PHP执行SQL文件并将SQL文件导入到数据库_PHP
  7. DevOps面试问题
  8. 盒子模型阴影设置,爱奇艺阴影配置
  9. 服务器安全证书更新失败怎么回事,手机安全证书更新失败怎么回事
  10. 四川长虹招聘机器视觉、图像识别工程师
  11. 史上最全Redis面试题(2020最新版)
  12. VmWare工作笔记001---弹出错误提示无法连接mks:套接字连接尝试次数太多
  13. 无网络环境下安装Dynamics CRM
  14. python爬虫之伪装浏览器
  15. SSH访问远程主机超时问题解决
  16. 深入Linux文件系统
  17. PJzhang:python快速搭建局域网文件共享服务器
  18. vue router hash和history的区别_react-router-v4
  19. java sort排序函数
  20. 发现一个导致Arduino无法打开串口监视器问题

热门文章

  1. 基于circom、snarkjs实现零知识证明不透漏具体地理位置的区域监控
  2. 错误: tensorflow:Early stopping conditioned on metric `val_accuracy` which is not available
  3. PL3366C-ASEMI移动电源管理IC
  4. Java处理MP3资料
  5. 什么是淘宝私域流量?和公域流量流量有何区别?
  6. 数字证书及其简单数字签名的实现(java实现)
  7. 现代存储架构:磁带存储在数据中心重生
  8. 磁带存储发展趋势浅析
  9. (整理)吊炸天的CNNs,这是我见过最详尽的图解!(下)
  10. PTA 租用游艇问题