bilibili面试题,python实现登录12306网站查看火车票信息,Python开发基础不牢

QR0pLksy7HDP0KcaoLe4%0A4RW6zRcscO7SRNJZOsF%2Fxj3Ooq76lzzdku3Uw957yjLFyf7ikixOaC%2FAOrLAwCc7y0krRpKJbSn3%0ApBsY%2F%2Fok%2Bmg2xNhXapoCPIt4w0p9’,  这段字符是随机生成的,过几秒就回失效。

‘39000D30280G’,  列车编号

‘D3028’,  车次

‘HKN’,  始发站

‘AOH’,  终点站

‘HKN’,  出发站

‘AOH’,  目的站

‘07:31’,  出发时间

‘13:06’,  到达时间

‘05:35’,  总耗时

‘Y’,  Y表示可以购票,N表示不可以

‘20181111’,  日期

后面基本都是座位的余票信息了。

对于提到的列车站点代码,可以通过请求这个链接,通过得到JS脚本中的station_names变量获取,对应的站点以@字符分隔,相关代码如下:

1 # 请求保存列车站点代码的链接

2 res1 = requests.get(“https://kyfw.12306.cn/otn/resources/js/framework/station_name.js”)

3 # 把分割处理后的车站信息保存在station_data中

4 self.station_data = res1.text.lstrip(“var station_names ='”).rstrip(“'”).split(‘@’)

1 # 返回车站英文缩写

2 def get_station(self, city):

3 for i in self.station_data:

4 if city in i:

5 return i.split(‘|’)[2]

6

7 # 返回车站中文缩写

8 def get_city(self, station):

9 for i in self.station_data:

10 if station in i:

11 return i.split(‘|’)[1]

由于ajax接口有了一点变化,所以我对之前的代码做了一点修改,在输入数据的部分:

1 # 需要按2018-01-01的格式输入日期,不然会出现错误

2 d = input(“请输入日期(如:2018-01-01):”)

3 f = self.get_station(input(“请输入您的出发站:”))

4 t = self.get_station(input(“请输入您的目的站:”))

5 url = “https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}” \

6 “&leftTicketDTO.to_station={}&purpose_codes=ADULT”.format(d, f, t)

完整代码


CJYDemo.py

import requests

from hashlib import md5

class CJYClient(object):

def init(self, username, password, soft_id):

self.username = username

self.password = md5(password.encode(‘utf8’)).hexdigest()

self.soft_id = soft_id

self.base_params = {

‘user’: self.username,

‘pass2’: self.password,

‘softid’: self.soft_id,

}

self.headers = {

‘Connection’: ‘Keep-Alive’,

‘User-Agent’: ‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)’,

}

def PostPic(self, im, codetype):

“”"

im: 图片字节

codetype: 题目类型 参考 http://www.chaojiying.com/price.html

“”"

params = {

‘codetype’: codetype,

}

params.update(self.base_params)

files = {‘userfile’: (‘ccc.jpg’, im)}

r = requests.post(‘http://upload.chaojiying.net/Upload/Processing.php’, data=params, files=files,

headers=self.headers)

return r.json()

def ReportError(self, im_id):

“”"

im_id:报错题目的图片ID

“”"

params = {

‘id’: im_id,

}

params.update(self.base_params)

r = requests.post(‘http://upload.chaojiying.net/Upload/ReportError.php’, data=params, headers=self.headers)

return r.json()

def use_cjy(filename):

username = “” # 用户名

password = “” # 密码

app_id = “” # 软件ID

cjy = CJYClient(username, password, app_id) # 用户中心>>软件ID

im = open(filename, ‘rb’).read() # 本地图片文件路径

return cjy.PostPic(im, 9004) # 9004->验证码类型

test.py

import json

import requests

from PIL import Image

from time import sleep

from .CJYDemo import use_cjy

from selenium import webdriver

from selenium.webdriver import ActionChains

from selenium.webdriver.common.by import By

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

(1)Python所有方向的学习路线(新版)

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

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-tYEz8nHW-1712417810838)]