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

yizhihongxing

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中使用NumPy对Legendre级数进行积分并设置积分的下限

    首先,需要导入NumPy和SciPy的库: import numpy as np from scipy.integrate import quad 接下来,我们定义一个函数来计算Legendre级数: def legendre_series(x, n): return np.sum([(2*n+1)/(2**(n+1))*np.math.factorial(…

    python-answer 2023年3月25日
    00
  • 详解Python 重命名目录中的所有文件名

    当需要批量重命名目录中的所有文件名时,可以使用Python进行自动化操作。以下是使用Python重命名目录中的所有文件名的完整攻略: 1. 导入必要的模块 要进行文件名修改,首先要导入Python内置的os模块,该模块提供了很多文件操作函数。 import os 2. 使用os.listdir()函数获取目录下的所有文件名 使用os.listdir()函数获…

    python-answer 2023年3月25日
    00
  • 关于c# .net爬虫

    刚开始听到爬虫这两个字眼的时候感觉挺稀奇的,之前并没有接触过爬虫,正好这会手上没事,于是便百度了一下。 1.网络爬虫(又被称为网页蠕虫。 当然了,这个解释很清晰,也很高尚,说到底,爬虫就是用来获取网页信息的! 2.有点门路了,于是我就自己写了一段代码 ////创建http请求 获取http参数 HttpWebRequest req = (HttpWebReq…

    爬虫 2023年4月13日
    00
  • python实现的登陆Discuz!论坛通用代码分享

    Python实现的登录Discuz!论坛通用代码分享 在使用Python进行爬虫抓取网页数据时,我们常常需要实现对目标网站的用户登陆操作,以便于能够获取需要用户身份验证的信息。对于Discuz!论坛,其登陆机制比较复杂,需要经过多个步骤才能完成。因此,本文将详细讲解如何使用Python实现自动登陆Discuz!论坛的完整攻略。 1. 分析Discuz!论坛的…

    python 2023年6月6日
    00
  • 希望这些问题和答案能对您有所帮助!

    以下是关于“希望这些问题和答案能对您有所帮助!”的完整使用攻略,包括理解问题和提供有用的信息。提供了两个示例以便更好地理解如何回答用户的问题。 步骤1:理解问题 在回答问题之前,我们需要理解用户的问题。在这种情况下,用户希望知道这些问题和答案是否对他们有所帮助。因此,我们需要提供一些用的信息,以帮助用户决定是否需要进一步了解这些问题和答案。 步骤2:提供有用…

    python 2023年5月12日
    00
  • Python Matplotlib通过plt.subplots创建子绘图

    当我们需要在一个图形中绘制多个子图时,可以使用Python Matplotlib库通过plt.subplots创建子绘图。 创建子图 我们首先需要导入Matplotlib库: import matplotlib.pyplot as plt 然后,使用plt.subplots()函数创建一个新的图形和子图: fig, ax = plt.subplots() 通…

    python 2023年5月18日
    00
  • python中实现定制类的特殊方法总结

    Python提供了一些特殊方法,也被称为魔法方法,用于定制类的行为。这些特殊方法都被双下划线包围,比如 __init__, __str__等。在本篇攻略中,我们将对一些重要的定制类的特殊方法进行总结,并提供一些示例说明。 __init__ __init__ 是 Python 中一个重要的特殊方法,用于在创建对象时进行初始化操作。在类的定义中,可以重写__in…

    python 2023年5月19日
    00
  • Python小程序爬取今日新闻拿走就能用

    Python小程序爬取今日新闻拿走就能用攻略 在本攻略中,我们将介绍如何使用Python爬取今日新闻,并提供两个示例。 步骤1:获取新闻网站的URL 在使用Python爬取今日新闻之前,我们需要获取新闻网站的URL。我们可以使用Python的requests库获取新闻网站的HTML代码,并使用Python的BeautifulSoup库解析HTML代码。 以下…

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