文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python:基于Python爬虫技术的抢票程序及其实现

2023-09-01 11:37

关注

临近放假,相信我们每天都在群聊里或者朋友圈看到一些帮忙抢火车票的信息。看到朋友们抢回家的车票这么辛(bei)苦(can),结合圈里一些前辈的指点,抱着学习的心态用Python做了一个简单的自动化抢票程序,抢到票之后通过绑定的邮箱(比如QQ)发通知。下面分享主要内容:

版本号 Python 3.6.5

编译器 PyCharm PRO 2018.1

浏览器 Google Chrome 71.0.3

在这里插入图片描述

首先,我们用到一个Splinter库:

相信做自动化测试、自动化爬虫的朋友都知道Selenium工具,它可以把人为驱动行为转化为机器执行,Splinter的药效跟它是一样的。我们可以进去cmd后用 pip install splinter

这个命令来安装。

然后,开始使劲地码:

在这里插入图片描述

1. 定义自动购票的类(初始化属性)

class Buy_Tickets(object):# 定义实例属性,初始化def __init__(self, username, passwd, order, passengers, dtime, starts, ends):self.username = usernameself.passwd = passwdself.order = order # 车次,0代表所有车次self.passengers = passengers # 乘客名self.starts = starts # 起始地和终点self.ends = endsself.dtime = dtime # 日期self.login_url = 'https://kyfw.12306.cn/otn/login/init'self.initMy_url = 'https://kyfw.12306.cn/otn/view/index.html'self.ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init'self.driver_name = 'chrome'self.executable_path = 'C:\python\chromedriver.exe'

2. 实现登录功能

def login(self):self.driver.visit(self.login_url)self.driver.fill('loginUserDTO.user_name', self.username)# sleep(1)self.driver.fill('userDTO.password', self.passwd)# sleep(1)print('请输入验证码...')while True:if self.driver.url != self.initMy_url:sleep(1)else:break

3. 实现购票功能

def start_buy(self):self.driver = Browser(driver_name=self.driver_name, executable_path=self.executable_path)# 窗口大小的操作self.driver.driver.set_window_size(1200, 700)self.login()self.driver.visit(self.ticket_url)try:print('开始购票...')# 加载查询信息self.driver.cookies.add({"_jc_save_fromStation": self.starts})self.driver.cookies.add({"_jc_save_toStation": self.ends})self.driver.cookies.add({"_jc_save_fromDate": self.dtime})self.driver.reload()count = 0if self.order != 0:while self.driver.url == self.ticket_url:self.driver.find_by_text('查询').click()count += 1print('第%d次点击查询...' % count)try:self.driver.find_by_text('预订')[self.order - 1].click()sleep(1.5)except Exception as e:print(e)print('预订失败...')continue

在这里插入图片描述

4. 邮箱通知付款

def sendMail(self, mail_title, mail_content):my_sender = 'xxx@qq.com' # 发件人邮箱账号my_user = 'xxxx@qq.com' # 收件人邮箱账号try:'''发送邮件'''msg = MIMEText(mail_content, "plain", 'utf-8') # 发送邮件内容msg["Subject"] = Header(mail_title, 'utf-8') # 发送邮件主题/标题msg["From"] = formataddr(['Bruce pk', my_sender]) # 邮件发送方msg["To"] = formataddr(['brucepk', my_user]) # 邮件接收方s = smtplib.SMTP("smtp.qq.com", 25) # 邮箱的传输协议,端口默认25s.login(my_sender, 'xxxxx') # 登录邮箱,这里的第二个参数为qq邮箱授权码,不要填你的登录密码s.sendmail(my_sender, [my_user, ], msg.as_string()) # 发送方,接收方,发送消息s.quit() # 退出邮箱print("抢票通知邮件发送成功!")except Exception:print("邮件发送失败~~")

还有,网络不好或者12306的服务器不稳定的时候,就会卡住,针对这种情况,系统会重复查询:

else:while self.driver.url == self.ticket_url:self.driver.find_by_text('查询').click()count += 1print('第%d次点击查询...' % count)try:for i in self.driver.find_by_text('预订'):i.click()sleep(1)except Exception as e:print(e)print('预订失败...')continueprint('开始预订...')sleep(1)print('开始选择用户...')for p in self.passengers:self.driver.find_by_text(p).last.click()sleep(0.5)if p[-1] == ')':self.driver.find_by_id('dialog_xsertcj_ok').click()sleep(3)print('提交订单...')self.driver.find_by_id('submitOrder_id').click()sleep(5)print('确认选座...')self.driver.find_by_id('qr_submit_id').click()print('预订成功...')sleep(5)self.sendMail(mail_title, mail_content)except Exception as e:print(e)

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

来源地址:https://blog.csdn.net/Yuki1127918/article/details/129879707

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯