python爬虫应用

Python爬取12306实现火车票查询
环境:win10、python3.7、pycharm2019.1、cpu

#coding:utf-8
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);

解析下载的的车次数据(近1个月) | 数据来源于12306(js 文件)

def parse_datas_of_train_number(file_path):
text=open(file_path,encoding=‘utf8’).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,Z
for 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 # 返回结果列表

数据持久化

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 文件中

程序运行成功后会生成两个文件
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值