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中,可以使用set()函数对字符串进行去重。下面是一个示例: # 示例1:字符串去重 s = "hello world" s = "".join(set(s)) print(s) # &quo…

    python 2023年5月13日
    00
  • Python网络爬虫之图片懒加载技术、selenium和PhantomJS

      动态数据加载处理方式 图片懒加载 selenium phantomJs 谷歌无头浏览器 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding:utf-8 -*- import requests from lxml import…

    爬虫 2023年4月13日
    00
  • pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)

    以下是详细的攻略: 标题:解决pyinstaller3.6版本通过pip安装失败的方法 前言 Pyinstaller是一个常用的将Python代码打包成独立可执行文件的工具,能够帮助Python开发者把程序的依赖项打包成一个.zip或.exe文件,让可执行文件可以在没有Python环境的机器上直接运行。 然而,最新的pyinstaller3.6版本在使用pi…

    python 2023年5月13日
    00
  • Python ConfigParser模块的使用示例

    下面是PythonConfigParser模块的使用示例的完整攻略。 PythonConfigParser模块简介 PythonConfigParser模块是Python标准库中的一个模块,用于解析和操作INI格式的配置文件。INI格式的配置文件是常见的用于配置应用程序的文件格式,通常以.ini或.cfg为后缀名,使用INI格式的配置文件可以方便地配置应用程…

    python 2023年5月13日
    00
  • python实战游戏之史上最难最虐的扫雷游戏没有之一

    Python实战游戏之史上最难最虐的扫雷游戏攻略 简介 扫雷是一款经典的益智游戏,对玩家的思维和操作能力有很高的要求。本文将详细讲解Python实现的史上最难最虐的扫雷游戏攻略。 游戏规则 扫雷游戏是由一定数量的雷区和剩余区域组成的网格。玩家需要通过逻辑推理在不触雷情况下打开所有非雷区的格子。每个非雷区周围都会有一个数字表示该格子周围的雷数。当玩家确定一个雷…

    python 2023年6月5日
    00
  • urllib和BeautifulSoup爬取维基百科的词条简单实例

    下面是“urllib和BeautifulSoup爬取维基百科的词条简单实例”的完整攻略。 1. 准备工作 在开始爬取维基百科的内容之前,我们需要做一些准备工作。 首先需要安装BeautifulSoup和urllib库,可以通过以下命令安装: pip install beautifulsoup4 pip install urllib 接下来,我们需要了解维基百…

    python 2023年6月3日
    00
  • pip报错“ValueError: invalid literal for int() with base 10: ‘3.3’”怎么处理?

    原因 “ValueError: invalid literal for int() with base 10: ‘3.3’” 错误通常是以下原因引起的: 版本号格式错误:如果您的版本号格式不正确,则可能会出现此错误。在这种情况下,您需要检查版本号格式是否正确。 版本号包含非数字字符:如果您的版本号包含非数字字符,则可能会出现此错误。在这种情况下,您需要删除版…

    python 2023年5月4日
    00
  • django中模板的html自动转意方法

    在Django中,模板中的HTML代码会被自动转义,以防止跨站脚本攻击(XSS)。这意味着,如果您在模板中使用HTML代码,它们将被转义为实体,而不是被解释为HTML标记。但是,有时候您可能需要在模板中使用原始的HTML代码,而不是转义后的实体。以下是详细讲解Django中模板的HTML自动转义方法的攻略,包含两个例。 示例1:使用safe过滤器 在Djan…

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