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 相关文章推荐
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 Python
Python实现高效求解素数代码实例
Jun 30 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
Python实现的线性回归算法示例【附csv文件下载】
Dec 29 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
django模板加载静态文件的方法步骤
Mar 01 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
Python3+Appium安装使用教程
Jul 05 Python
在Python函数中输入任意数量参数的实例
Jul 16 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
Python Pillow(PIL)库的用法详解
Sep 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验证码类代码分享(已封装成类)
2011/07/17 PHP
Array of country list in PHP with Zend Framework
2011/10/17 PHP
有关php运算符的知识大全
2011/11/03 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
浅析php原型模式
2014/11/25 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
php实现两个数组相加的方法
2015/02/17 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
php 数据结构之链表队列
2017/10/17 PHP
extjs两个tbar问题探讨
2013/08/08 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
Python调用命令行进度条的方法
2015/05/05 Python
Python可变参数函数用法实例
2015/07/07 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
Python测试人员需要掌握的知识
2018/02/08 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
python实现websocket的客户端压力测试
2019/06/25 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
python 实现IP子网计算
2021/02/18 Python
百思买美国官网:Best Buy
2016/07/28 全球购物
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
化工实习心得体会
2014/09/09 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书