python编程实现12306的一个小爬虫实例

Python编程实现12306的一个小爬虫实例

爬虫实例介绍

本爬虫实例主要是用Python编写的,通过模拟用户登录和查询车票的方式来获取查询结果。在本实例中,我们将使用requests库和正则表达式来进行实现,最终可以输出符合条件的车票信息。

实现步骤

步骤一:模拟登录

首先,我们需要模拟用户登录。通过F12或其他抓包工具,可以查看12306网站登录时提交的表单信息,我们需要根据这些信息来编写模拟登录代码。示例代码如下:

import requests

# 需要登录的账号密码
username = 'your username'
password = 'your password'

# 请求发送的URL地址
login_url = 'https://kyfw.12306.cn/passport/web/login'

# 构建请求头
headers = {
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Length': '40',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Host': 'kyfw.12306.cn',
    'Origin': 'https://kyfw.12306.cn',
    'Referer': 'https://kyfw.12306.cn/otn/resources/login.html',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest'
}

# 构建请求参数
params = {
    'username': username,
    'password': password,
    'appid': 'otn'
}

# 发送POST请求进行模拟登录
response = requests.post(login_url, headers=headers, data=params)
# 检查登录结果
print(response.json()['result_message'])

步骤二:查询车票

登录成功后,我们可以模拟用户查询车票。通过F12或其他抓包工具,可以查看12306网站查询车票时提交的表单信息,我们需要根据这些信息来编写模拟查询代码。示例代码如下:

# 查询车次的站点信息,需根据实际需求修改,仅用作示例
from_station = '北京'
to_station = '上海'

# 请求发送的URL地址
query_url = f'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={train_date}&leftTicketDTO.from_station={from_station}&leftTicketDTO.to_station={to_station}&purpose_codes=ADULT'

# 发送GET请求进行模拟查询
response = requests.get(query_url)
# 解析查询结果
result = response.json()['data']['result']
# 输出所有符合条件的车票信息
for item in result:
    split_item = item.split('|')
    if split_item[0] == '预订' and split_item[3] == 'G101':
        print('车次:', split_item[3])
        print('出发站点:', split_item[6])
        print('到达站点:', split_item[7])
        print('出发时间:', split_item[8])
        print('到达时间:', split_item[9])
        print('一等座:', split_item[31])
        print('二等座:', split_item[30])
        print('------------------------------')

示例说明

以上示例代码仅供参考,具体实现方法需依据实际情况进行修改。其中模拟登录和模拟查询均需要根据12306网站返回的请求头信息来进行构建请求头,以及根据实际车次信息来进行筛选。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python编程实现12306的一个小爬虫实例 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 详解Python 函数如何重载?

    详解Python 函数如何重载? 什么是函数重载? 在编程中,函数重载指的是在同一个程序中定义具有相同名称的多个函数,但它们的参数个数或类型不同,从而实现类似于方法的重载特性。Python 提供了一种类似的机制,功能类似于函数重载,但实现方式不同。 Python 如何实现函数重载? Python 并不像 C++ 那样支持真正意义上的函数重载,即在同一个作用域…

    python 2023年6月5日
    00
  • python 多进程和协程配合使用写入数据

    为了更好地理解多进程和协程配合使用写入数据的完整攻略,我们需要先详细了解一下多进程和协程的概念以及特点。 多进程是指同一时间内,运行着多个进程在同一台计算机上。每个进程通过操作系统分配独立的内存空间,互相之间不会干扰。多进程可以利用现代计算机的多核处理器,可以同时执行多个任务,提高CPU利用率和运行效率。 协程是轻量级的线程,它可以在同一个线程中实现多个并发…

    python 2023年5月19日
    00
  • Python实现删除某列中含有空值的行的示例代码

    下面是Python实现删除某列中含有空值的行的示例代码的完整攻略: 步骤1:读取数据文件 首先,我们需要将数据文件读入到Python程序中。假设我们的数据文件名为data.csv,我们可以使用Python内置的csv模块读取该文件,示例代码如下: import csv with open(‘data.csv’, newline=”) as csvfile:…

    python 2023年6月3日
    00
  • Python实现学生信息管理系统的示例代码

    下面我将为你详细讲解“Python实现学生信息管理系统的示例代码”的完整攻略。 标题 首先,我们需要确定文章的标题,可以采用H1标题:Python实现学生信息管理系统的示例代码 简介 在介绍完整攻略前,先来简单介绍一下课题背景。学生信息管理系统是一个常见的题目,通过实现此题可以深入学习Python语言,包括掌握基本语法、对文件读写的操作方法、管理数据的方法、…

    python 2023年5月19日
    00
  • python程序需要编译吗

    Python是一门解释型语言,是不需要编译的,也就是说Python源码无需经过编译器的处理,可以直接运行。这点和Java、C++等编译型语言不同。 Python解释器读取 Python 代码,将其解释成字节码(bytecode),再运行。在这个过程中,Python解释器把代码翻译成一种叫做“字节码”的形式。字节码文件以.pyc为后缀,保存在 pycache …

    python 2023年5月23日
    00
  • Python 如何实时向文件写入数据(附代码)

    下面是Python实时向文件写入数据的攻略: 1. 前言 在很多情况下,我们需要将程序中的实时数据或者日志信息写入文件,以方便后续的分析和处理。本文将介绍如何使用Python实现实时向文件写入数据的功能。 2. 实现方法 Python中实现实时向文件写入数据的方法主要有两种,分别是使用普通的文件输出流和使用logging库。下面我们将分别介绍这两种方法的实现…

    python 2023年6月3日
    00
  • Python3.2中Print函数用法实例详解

    关于Python3.2中Print函数的用法,需要注意以下几点: 一、基本用法 在Python3.x中,print()函数是用来将括号中的内容输出到控制台中的。它具有以下两种基本形式: 最简单的形式:print(“Hello, World!”),引号中的内容将在控制台中输出。 将多个参数传递给print()函数,可以在控制台中输出多个内容。例如:print(…

    python 2023年6月3日
    00
  • 简单的Python人脸识别系统

    简单的Python人脸识别系统 概述 Python人脸识别系统一般由以下几个模块构成: 摄像头模块:通过电脑或者外接摄像头采集照片或者视频 人脸检测模块:使用人脸检测算法从采集的照片或者视频中提取人脸图像 人脸特征提取与比对模块:对于每个人,在系统中维护一个特征向量用于表示一个人的特征,新采集到的人脸图像与系统中维护的人脸特征向量进行比对,判断是否为同一人 …

    python 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部