-
注意:控制次数后面加?表示次数尽可能可能少匹配(非贪婪匹配)
-
正则转意:想让特殊功能的符号表示它本身,就可以通过\转移意,除了\和—,其他的符号放在[]中都表示符号本身
-
匹配相关:match、fullmatch 返回值是匹配对象
span(), group(), string(),start(),end()
查找相关
- search(正则表达式,字符串) 返回一个对象和None,
- 去字符串中查找满足正则表达式的子串,如果有返回第一个满足条件的字符串匹配对象
- findall() 获取所有满足正则表达式条件的子串,返回一个元素是字符串的列表。如果正则中有分组,自取分组中的内容
- finditer() 获取所有满足正则表达式的子串,返回一个迭代器,迭代器中的内容是匹配对象
切割相关
- split() 按满足正则条件的子串对字符串进行切割
- sub(正则,替换值,字符串)
- compile()将正则表达式转换成正则表达式对象
一、网络基础
1、osi参考模型(7层):国际化标准组织分析计算机通信,把计算机通信进行的规范和标准化分成7层
- 应用层
- 表示层
- 会话层:建立回话、木马(盗取数据)
- 传输层
- 网络层
- 数据链路层
- 物理层
2、tcp/ip协议
- 数据传输准备
- 传输层:消息或数据段 :tcp头和数据
- 网络层:ip头+ tcp头和数据+FCS
- 数据链路层:MAC+ ip头+ tcp头和数据+FCS
- 物理层:转换成二进制(bit)
3、tcp可靠传输
- 需要传输的文件需要分段传输
- 需要建立连接
4、udp不可靠传输
- 一个数据包就能完成数据通信
- 不需要建立回话
二、socket套接字
1、什么是套接字
- 实现网络通信的两端就是套接字,分为服务器对应的套接字和客户端对应的套接字
2、socket编程
- 就是用程序实现服务器和客户端
- python提供了一个socket标准库来实现socket编程
服务器程序
import socket
# i.创建服务器对应的套接字对象
# socket(faimliy,type)
# faimliy: 设置ip类型(AF_INET默认为Ipv4,AF_INET6(ipv6))
# type:# 设置传输类型(SOCK_STREAM默认值(TCP协议可靠传输),SOCK_STREAM=2(UDP不可靠传输))
server = socket.socket() # 创建一个基于ipv4的可靠传输的服务器套接字
# 2.绑带ip地址和端口
# bind((ip, 端口)) :参数时元祖(ip,端口)
# ip:服务器的地址(字符串)
# 端口:不同的端口用来区分不同的服务(端口就是应用程序的唯一标识),取值范围(0-65535),注意0-1024属于著名端口
server.bind(('10.7.156.141', 8080))
# 3、监听请求
# listen(个数) : 通过数字设置服务一次可以处理多少个请求个数
server.listen(512)
print('开始监听')
# 4、让服务器一直处于循环状态
while True:
# 5、接受请求
# accept() 接受请求执行到accpet程序会停下来(阻塞线程),如果有客户端在请求这个服务器时才会往下执行。返回会哈和客户端的地址
conversion, addr = server.accept()
print(addr)
# 6、服务器给客户端发送数据
# send(data) 发送数据
# data:需要发送的数据,要求是二进制数据(bytes)
# str转二进制bytes
# 方法一:
# 语法:bytes(内容)
# 方法二:
# 字符串.encode(编码方式)
message = input('>>>>')
message_data = bytes(message, encoding='utf-8') # 类型转换
conversion.send(message_data)
# 7、接受客户端发送的消息
# recv(字节数) 接受客户端发送的数据,参数是用来设置一次能就收的最大字节数
# 注意:recv方法也会阻塞线程,也就是说程序运行到这里会停下来,等到对方发送消息为止
# 返回接收到的数据(接收到二进制数据)
# 如果接收到字符串(需要将二进制转换成字符串)
# str(二进制, encoding='utf-8')
# 二进制.decode(编码方式)
data = conversion.recv(1024)
# re_message = str(data, encoding='utf-8')
re_message = data.decode('utf-8')
print(re_message)
三、socket客户端
- 端口号:同一时间同一个端口只能绑定一个服务
# 客户端
import socket
# 1、创建套接字对象
client = socket.socket()
# 2.连接服务器
# connect((地址,端口))
client.connect(('10.7.156.97', 8080))
while True:
# 4、给服务器发送消息
message = input('>>>')
client.send(message.encode('utf-8'))
# 3、接受服务器返回的服务器
re_data = client.recv(1024)
print('他说:', re_data.decode('utf-8'))
if re_data == '拜拜':
break
# 服务器
import socket
# 1、创建服务器
server = socket.socket()
server.bind(('10.7.156.141', 8080))
server.listen(100)
while True:
# 接受请求
conversation, addr = server.accept()
print(conversation)
# 用于保持回话
while True:
message_re = conversation.recv(1024).decode('utf-8')
print(('他说(%s):%s'%(addr[0][-2:], message_re)))
# 发送消息
message = input('>>>>')
conversation.send(message.encode('utf-8'))
if message == '拜拜':
break
五、HTTP和HTTPS
- 1、URL:统一资源定位符,就是互联网上每个资源的唯一标识
- 2、URL:协议://主机地址/路径
协议:不同的协议,代表不同的资源查找方式、资源传输方式 - 存放资源的主机(服务器)的ip地址(域名)
- 路径:资源在主句中的相对路径
2、常见协议
- HTTP:超文本传输协议,访问远程的网络资源,开发中最常见的协议
- file:访问本地计算机资源
- mailto:访问电子邮件地址
- FTP:访问的是共享主机的文件资源
3、HTTP协议
- 超文本传输协议
- 作用:让客户端和服务器端能有效进行通讯,同时规定了客户端和服务器之间的数据传输格式
4、HTTP特点
- 简单快速
- 灵活:允许传输各种各样的数据
- 在0.9-1.0使用非持续连接:服务器对客户端的请求做出响应后就会自动断开连接
5、HTTP通讯过程
- 请求:客户端 到 服务器端
- 响应:服务器端 到 客户端
6、常见的状态码
状态码 | 含义 |
---|---|
200 | 请求成功 |
400 | 客户端请求语法错误,服务器不发解析 |
404 | NotFound 服务器无法根据客户端的请求找到资源 |
500 | 服务器内部错误,无法完成请求 |
六、学习request
- python中没有一个标准库来支持网络请求,但目前有一个第三方库支持HTTP请求
import requests
# get(url, params)
# url:请求地址
# paams: 客户端给服务器发送数据(字典){参数名:值}
url = 'https://www.apiopen.top/satinApi'
# https://www.apiopen.top/satinApi?type=1&page=1
response = requests.get(url, {'type':1, 'page':1})
# 1.获取响应头
# print(response.headers)
# 2、获取响应体
# 方式1:(二进制形式的响应体)
data_bytes = response.content
# print(data_bytes)
# 方式2:(字符串形式)
data_text = response.text
print(data_text)
# 方式3:(json格式对应的python数据)
data_json = response.json()
# print(data_json)
网友评论