'''c/s模式编程: c客户端, s服务端TCP套接字套接字模块: socketnetfamily: socket.AF_INET(跨网络通信)/AF_UNIX(计算机本地通信,效率更高,对操作系统有一定要求,需要unix-like(uninx/linux/macos)操作系统)SOCK_STREAM: tcp套接字类型SOCK_DGRAM: UDP套接字类型域名和ip的关系:域名: www.baidu.com, 通俗的说域名是ip的一个别名, 103.235.46.39www.baidu.com -> 103.235.46.39www.baidu.com -> 103.235.46.401. 域名容易记忆, ip不容易记忆2. ip会发生变化, 域名相对不会发生变化变量是内存地址的一个别名, 0x12345678, 非常容易识别好记实现一个tcp的客户端'''import socket# 1. 初始化套接字实例(socket)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2. 连接服务器, ip+端口(port)baidu_ip = 'www.baidu.com'baidu_port = 80s.connect((baidu_ip, baidu_port))# 3. 发送请求数据s.send(b'GET / HTTP/1.1\r\nUser-Agent: curl/7.29.0\r\nHost: www.baidu.com\r\nAccept: */*\r\nConnection: close\r\n\r\n')# 4. 接收响应数据, received = s.recv(1024) # buffer缓冲区的大小, 容器大小print(d)# 5. 关闭网络连接, 释放资源s.close()
import stringimport tkinterfrom tkinter import ttkimport random as rwindow = tkinter.Tk()window.title("随机密码生成器")'''gui 事件驱动1. 根据用户的操作去进行响应的处理2. 定时器, after, 在多少时间之后触发一个函数的回调, 格式: win.after(delay_ms,func=函数,*args), 只会执行一次3. 事件绑定, bind, 专门将事件和一个函数进行绑定, 格式: win.bind(sequence=<事件名>,func=函数)3.1 按键: 键盘敲击某个按键去调用一个函数3.2 鼠标: 鼠标按某个键(左/右/中)去调用一个函数事件名如何表示:- 鼠标事件: Button: 代表所有鼠标键的点击Button-1: 代表鼠标左键的点击Button-2/3: 代表鼠标右键的点击ButtonPress: 鼠标按下事件ButtonPress-1: 代表鼠标左键的点击ButtonPress-2/3: 代表鼠标右键的点击ButtonRelease: 鼠标抬起事件ButtonRelease-1: 代表鼠标左键的点击ButtonRelease-2/3: 代表鼠标右键的点击- 按键事件: KeyPress: 按键按下KeyRelease: 按键抬起KeyPress-a: 按字母按下事件, 区分大小写Control-Shift-KeyPress-H: 组合键KeyPress-Return: 回车键Enter函数: bind函数有固定格式, 一个参数event'''def func01():print("after function")window.after(100, func=func01)# window.after(5000, func=func01)def f
'''GUItkinter tk interfaceGUI概念窗口: 是所有组件的容器, 一个GUI程序只能有一个窗口控件: 窗口里面盛放的小组件, 比如按钮/文本框.. 简单控件/组合控件事件: 是窗口和用户之间的交互, 通过事件窗口可以响应外部的操作窗口的布局:- 绝对布局: place- 相对布局: pack- 网格布局: grid控件:- 按钮 Button- 文本框: Label- 文本输入框: Entry- 单选框: RadioButton- 下拉框: Commobbox控件名(master,options)'''import stringimport tkinterfrom tkinter import ttkimport random as rwindow = tkinter.Tk()window.title("随机密码生成器")label = tkinter.Label(window, text='密码:')label.grid(row=0, column=0)entry_text = tkinter.StringVar()entry = tkinter.Entry(window, textvariable=entry_text)entry.grid(row=0, column=1)def gen_poor_password(password_len):list = r.choices(string.ascii_lowercase, k=password_len)return ''.join(list)def medium_password(len):password = r.choices(string.ascii_lowercase + string.ascii_uppercase + string.digits, k=len)return ''.join(password)'''entry设置文本的两种方法:- entry.delete(0, tkinter.END)/entry.insert(0, password)- 控制变量: entry_text.set(password)'''def
'''GUItkinter tk interfaceGUI概念窗口: 是所有组件的容器, 一个GUI程序只能有一个窗口控件: 窗口里面盛放的小组件, 比如按钮/文本框.. 简单控件/组合控件事件: 是窗口和用户之间的交互, 通过事件窗口可以响应外部的操作窗口的布局:- 绝对布局: place- 相对布局: pack- 网格布局: grid控件:- 按钮 Button- 文本框: Label- 文本输入框: Entry- 单选框: RadioButton- 下拉框: Commobbox控件名(master,options)'''import tkinterfrom tkinter import ttkwindow = tkinter.Tk()window.title("随机密码生成器")label = tkinter.Label(window, text='密码:')label.grid(row=0, column=0)entry = tkinter.Entry(window)entry.grid(row=0, column=1)def fun01():print("button clicked")entry.insert(0, "button clicked")print(var_radio.get())btn = tkinter.Button(window, text="生成", command=fun01, cursor="plus")btn.grid(row=0, column=2, columnspan=3, sticky=tkinter.W + tkinter.N)# RadioButton# 多选框# image# 参数: 主控件, options# pad 填充# text: text静态文本, 程序运行时不改变的# textvariable: 是动态文本, 程序运行时能动态改变的# radiobutton成组出现时: variable参数一定要是同一个, 并且value参数不能相同var_radio = tkinter.IntVar()radio = tkinter.Radiobutton(window, t
'''GUItkinter tk interfaceGUI概念窗口: 是所有组件的容器, 一个GUI程序只能有一个窗口控件: 窗口里面盛放的小组件, 比如按钮/文本框.. 简单控件/组合控件事件: 是窗口和用户之间的交互, 通过事件窗口可以响应外部的操作窗口的布局:- 绝对布局: place- 相对布局: pack- 网格布局: grid控件:- 按钮 Button- 文本框: Label- 文本输入框: Entry- 单选框: RadioButton- 下拉框: Commobbox控件名(master,options)'''import tkinterwindow = tkinter.Tk()window.title("随机密码生成器")label = tkinter.Label(window, text='密码:')label.grid(row=0, column=0)entry = tkinter.Entry(window)entry.grid(row=0, column=1)def fun01():print("button clicked")entry.insert(0, "button clicked")btn = tkinter.Button(window, text="生成", command=fun01)btn.grid(row=0, column=5)window.mainloop() # 主循环, 进入事件系统
# 将站名从json里加载到python dict里import jsonimport requestswith open("station_name.json", "r", encoding="utf-8") as file:station_names = json.load(file)#1. 定义cookie, 从浏览器上复制标头里的Cookie信息#2. requests.get方法中使用cookies参数传递cookiecookie = {"Cookie": "_uab_collina=163989662013689087788656; JSESSIONID=6F71D581C0B79F538C48D84671D90C59; _jc_save_fromStation=%u5317%u4EAC%2CBJP; _jc_save_toStation=%u4E0A%u6D77%2CSHH; _jc_save_wfdc_flag=dc; BIGipServerpassport=904397066.50215.0000; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; RAIL_EXPIRATION=1641978502826; RAIL_DEVICEID=lRZ-NZ8KVvenlmxGVRDY6sEQLl9vfztTy046woUuXxahLWPUQEiV1Z0CvmDakEt9nFIjADCwL1Bc_wWLHO3K7q553hxN_R18_cfYCT2lOIuBCcW5HyG6yLGYwmhZfZfVdB3ajjcpMk5uS4OT3vKzTugHJ27YBf5l; route=9036359bb8a8a461c164a04f8f50b252; _jc_save_toDate=2022-01-09; BIGipServerotn=149946890.50210.0000; _jc_save_fromDate=2022-01-09"}# 1. 将出发日期/起始站/到达站 定义成变量# 2. 将变量放入url(网络地址)中进行网络请求(request
'''如何查看网络请求: 打开浏览器, 通过F12快捷键打卡开发者工具, 在开发者工具网络(Network)选项卡中查看网络请求浏览网站流程:1. 客户端(浏览器)发送网络请求2. 服务器(12306网站服务端)接收到用户请求,处理用户请求3. 服务器发送处理结果给客户端(浏览器)网络名词:Url: 是网站的唯一标识, 是网站的地址, 通过在浏览器中输入url即可访问指定的网站Cookie: 网站识别用户的唯一标识url类似于门牌号, cookie类似于钥匙JSESSIONID=53E77D821DFA1A6370BF18B68D00D526; route=9036359bb8a8a461c164a04f8f50b252; BIGipServerotn=955253258.50210.0000; RAIL_EXPIRATION=1640156627608; RAIL_DEVICEID=HHUFxIoyq5IJ3XCexA1nnSNQtNz3vdfdA43QeppBvaM_rEhMdmROm-u3lkTrouIfO2De29t5zllpye_T-ZRw4wLXT00unHv7UxpO5NfFZjJQ4YuAfMfpUoKBEfxnLZgOXkOAu1L421JWJbzDmHykIonNyxG6DEyy; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=offrequests模块: 模拟客户端进行url请求使用pip安装request模块: 打开cmd,运行 pip install requests'''import requests # 导入request模块# 使用request的get方法模拟浏览器访问12306网页response = requests.get('https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9217')split_result = response.text.split('@')# print(split_result)'''忽略列表里
'''如何查看网络请求: 打开浏览器, 通过F12快捷键打卡开发者工具, 在开发者工具网络(Network)选项卡中查看网络请求浏览网站流程:1. 客户端(浏览器)发送网络请求2. 服务器(12306网站服务端)接收到用户请求,处理用户请求3. 服务器发送处理结果给客户端(浏览器)网络名词:Url: 是网站的唯一标识, 是网站的地址, 通过在浏览器中输入url即可访问指定的网站Cookie: 网站识别用户的唯一标识url类似于门牌号, cookie类似于钥匙JSESSIONID=53E77D821DFA1A6370BF18B68D00D526; route=9036359bb8a8a461c164a04f8f50b252; BIGipServerotn=955253258.50210.0000; RAIL_EXPIRATION=1640156627608; RAIL_DEVICEID=HHUFxIoyq5IJ3XCexA1nnSNQtNz3vdfdA43QeppBvaM_rEhMdmROm-u3lkTrouIfO2De29t5zllpye_T-ZRw4wLXT00unHv7UxpO5NfFZjJQ4YuAfMfpUoKBEfxnLZgOXkOAu1L421JWJbzDmHykIonNyxG6DEyy; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=offrequests模块: 模拟客户端进行url请求使用pip安装request模块: 打开cmd,运行 pip install requests'''import requests # 导入request模块# 使用request的get方法模拟浏览器访问12306网页response = requests.get('https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9217')split_result = response.text.split('@')print(response.text.split('@'