Python爬取12306车次信息代码详解


Posted in Python onAugust 12, 2020

详情查看下面的代码:

如果被识别就要添加一个cookie如果没有被识别的话就要一个user—agent就好了。如果出现乱码就设置编码格式为utf-8

#静态的数据一般在elements中(复制文字到sources按ctrl+f搜索。找到的为静态),而动态去network中去寻找相关的信息
import requests
import re
def send_request():
  headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
        ,'Cookie':'_uab_collina=159618052151589201474313; JSESSIONID=D33C89D8BEC6A692C79CFA69FC0B0D29; BIGipServerotn=233832970.24610.0000; BIGipServerpool_passport=216859146.50215.0000; RAIL_EXPIRATION=1596443951465; RAIL_DEVICEID=nMo94O2Z21cXLblW7otLoxUZ_LP9Q01PYj_I89OqU6MqjxyX9814Jc3CH5TNwgBVJqnBaBG8OGiBWo2QtNcu5wVu-asNk6YLa49g0fMwVp03XFJQ-GkhHYHcqIgUd-nqQB_VEdWH1Om_D2yAgIu8QcEavt02pmH5; route=c5c62a339e7744272a54643b3be5bf64; _jc_save_fromStation=%u5317%u4EAC%2CBJP; _jc_save_toStation=%u5929%u6D25%2CTJP; _jc_save_fromDate=2020-07-31; _jc_save_toDate=2020-07-31; _jc_save_wfdc_flag=dc'}#创建头部信息
  url='https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2020-07-31&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=TJP&purpose_codes=ADULT'
  #设置编码格式。防止乱码
  resp=requests.get(url,headers=headers)
  resp.encoding='utf-8'
  return resp

#解析数据
#{}是字典。根据key获取值。
def parse_json(resp,city):
  json_ticket=resp.json()#将相应的数据转换为json
  data_list=json_ticket['data']['result']#得到车次的列表
  lst=[]#列表
  for item in data_list:
    #遍历车次信息进行分割
    d=item.split('|')
    lst.append([d[3],city[d[6]],city[d[7]],d[31],d[30],d[13]])
  return lst
'''
d[3]从列表中获取索引为3的表示车次
d[6]查询起始站
d[7]查询到达站
d[31]一等座
d[30]表示二等座
d[13]表示出行时间'''
#获得station_name的信息
def get_city():
  url='https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9151'
  headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
  resp=requests.get(url,headers=headers)
  resp.encoding='utf-8'
  #进行数据的提取(只要一部分)
  stations=re.findall('([\u4e00-\u9fa5]+)\|([A-Z]+)',resp.text)
  #将列表进行转换为字典
  stations_data=dict(stations)
  #key与value进行互换
  station_d={}#空字典。用于完成上述操作
  for item in stations_data:
    station_d[stations_data[item]]=item
  #print(station_d)
  return station_d

def start():
  lst=parse_json(send_request(),get_city())
  #进行数据的筛选(得到有效的数据)
  for i in lst:
    if i[3]!='无' and i[3]!='':
      print(i)
if __name__=='__main__':
  start() #开始

运行的截图:

Python爬取12306车次信息代码详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用PIL库批量给图片加上序号的教程
May 06 Python
python计算时间差的方法
May 20 Python
Django返回json数据用法示例
Sep 18 Python
Windows平台Python连接sqlite3数据库的方法分析
Jul 12 Python
pandas值替换方法
Jul 10 Python
python中的turtle库函数简单使用教程
Jul 23 Python
Python中利用aiohttp制作异步爬虫及简单应用
Nov 29 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
pandas进行时间数据的转换和计算时间差并提取年月日
Jul 06 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
python实现名片管理器的示例代码
Dec 17 Python
python中加背景音乐如何操作
Jul 19 Python
Python读取xlsx数据生成图标代码实例
Aug 12 #Python
Idea安装python显示无SDK问题解决方案
Aug 12 #Python
Python selenium如何打包静态网页并下载
Aug 12 #Python
Python selenium爬取微信公众号文章代码详解
Aug 12 #Python
PyQt5 QDockWidget控件应用详解
Aug 12 #Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 #Python
基于python requests selenium爬取excel vba过程解析
Aug 12 #Python
You might like
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
php析构函数的简单使用说明
2015/08/24 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
在Django的通用视图中处理Context的方法
2015/07/21 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
自我鉴定书面格式
2014/01/13 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
组织生活会发言材料
2014/12/15 职场文书
办公室文员岗位职责
2015/02/04 职场文书
公司员工手册范本
2015/05/14 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL