Python编程进阶(一):Python网络编程基础
前言
亲爱的读者朋友们,大家好!👋
欢迎回到一如老师的公众号,今天是我们的第二十七天更新。在前面的学习中,我们已经掌握了Python的基础知识,并通过项目实战巩固了所学内容。本期,我们将进入Python编程的进阶部分,首先探讨Python网络编程基础。
网络编程是当今软件开发的重要组成部分,无论是开发Web应用、网络爬虫,还是实现网络通信,都需要掌握网络编程的相关知识。让我们一起开启Python网络编程的探索之旅吧!🌐🚀
一、网络编程概述
1. 什么是网络编程?
网络编程是指编写程序,实现网络通信的过程。通过网络编程,程序可以在网络上发送和接收数据,实现不同设备或应用之间的交互。
2. 常见的网络协议
TCP/IP:传输控制协议/互联网协议,是互联网的核心协议。 UDP:用户数据报协议,提供无连接的、不可靠的数据传输。 HTTP/HTTPS:超文本传输协议,用于万维网数据传输。
3. Python中的网络编程模块
socket:Python标准库中的套接字接口,支持底层网络通信。 requests:第三方库,简化了HTTP请求的处理。
二、使用 socket
模块进行网络编程
1. 套接字简介
套接字(socket)是网络通信的端点,可以在网络中发送或接收数据。
2. 基本使用步骤
创建套接字 绑定地址和端口(服务器端) 监听连接(服务器端) 连接服务器(客户端) 发送和接收数据 关闭套接字
3. 示例:创建一个简单的TCP服务器和客户端
服务器端代码(server.py)
import socket
def tcp_server():
# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_socket.bind(('localhost', 8888))
# 开始监听
server_socket.listen(5)
print("服务器已启动,等待客户端连接...")
while True:
# 接受客户端连接
client_socket, addr = server_socket.accept()
print(f"客户端已连接:{addr}")
# 接收数据
data = client_socket.recv(1024).decode('utf-8')
print(f"收到客户端消息:{data}")
# 发送回复
client_socket.send("服务器已收到你的消息!".encode('utf-8'))
# 关闭客户端套接字
client_socket.close()
if __name__ == '__main__':
tcp_server()
客户端代码(client.py)
import socket
def tcp_client():
# 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect(('localhost', 8888))
# 发送数据
client_socket.send("你好,服务器!".encode('utf-8'))
# 接收回复
data = client_socket.recv(1024).decode('utf-8')
print(f"收到服务器回复:{data}")
# 关闭套接字
client_socket.close()
if __name__ == '__main__':
tcp_client()
运行结果
服务器端
服务器已启动,等待客户端连接...
客户端已连接:('127.0.0.1', 12345)
收到客户端消息:你好,服务器!
客户端
收到服务器回复:服务器已收到你的消息!
三、使用 requests
库发送HTTP请求
1. requests
库简介
requests
是一个用于发送HTTP请求的第三方库,简化了网络请求的处理,被称为Python最友好的HTTP库。
2. 安装 requests
库
pip install requests
3. 发送GET请求
import requests
response = requests.get('https://api.github.com')
print(response.status_code) # 输出状态码
print(response.headers['content-type']) # 输出响应头
print(response.text) # 输出响应内容
4. 发送POST请求
import requests
payload = {'username': 'testuser', 'password': 'testpass'}
response = requests.post('https://httpbin.org/post', data=payload)
print(response.json()) # 输出JSON响应内容
5. 处理响应
import requests
response = requests.get('https://api.github.com')
# 检查响应状态码
if response.status_code == 200:
data = response.json()
print(data)
else:
print(f"请求失败,状态码:{response.status_code}")
四、实践案例
1. 网络爬虫:爬取网页标题
需求描述
使用 requests
获取网页内容,使用 re
模块提取网页标题。
示例代码
import requests
import re
def get_page_title(url):
response = requests.get(url)
if response.status_code == 200:
html = response.text
# 使用正则表达式提取<title>标签内容
title = re.search(r'<title>(.*?)</title>', html, re.IGNORECASE)
if title:
print(f"网页标题:{title.group(1)}")
else:
print("未找到网页标题。")
else:
print(f"请求失败,状态码:{response.status_code}")
url = input("请输入网址:")
get_page_title(url)
运行结果
请输入网址:https://www.python.org
网页标题:Welcome to Python.org
2. 简单的HTTP服务器
需求描述
使用 http.server
模块创建一个本地HTTP服务器,提供简单的网页服务。
示例代码
from http.server import HTTPServer, SimpleHTTPRequestHandler
def run_server():
server_address = ('', 8000)
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
print("HTTP服务器已启动,监听端口8000...")
httpd.serve_forever()
if __name__ == '__main__':
run_server()
运行结果
在浏览器中访问 http://localhost:8000
,即可看到当前目录下的文件列表。
五、小结
通过本节的学习,我们初步了解了Python网络编程的基础知识。我们学习了如何使用 socket
模块进行TCP通信,实现简单的服务器和客户端。同时,我们学习了如何使用 requests
库发送HTTP请求,获取网络资源。
网络编程是一个广阔的领域,后续我们将深入学习更高级的网络编程技术,如多线程网络编程、异步IO,以及使用高级框架进行网络应用开发。
六、实践与思考
实践:
UDP通信
使用
socket
模块,实现一个简单的UDP服务器和客户端,完成消息的发送和接收。网页内容分析
编写程序,获取指定网页的内容,提取其中的所有链接,并保存到文件中。
思考:
网络协议选择
在网络编程中,如何根据应用需求选择合适的网络协议(TCP/UDP)?
异常处理与网络安全
在网络通信中,如何处理各种异常情况,并保证通信的安全性和可靠性?
七、加入我们的知识星球!
想要获取更多的学习资源和指导吗?加入我们的 「一如老师的编程与设计星球」,你将获得:
独家学习资料:丰富的教程、源码、笔记等资源。 答疑解惑:一对一的学习问题解答,助你突破难点。 项目实战:参与真实项目,提升实战能力,积累经验。 职业指导:提供就业、面试等方面的建议,助你迈向理想职业。
扫码立即加入,和更多志同道合的伙伴一起成长!

八、加入我们的学习群!
为了更好地交流和学习,欢迎大家加入 「一如老师编程设计交流中心」,与更多的朋友一起进步!
QQ群号:965696190 微信群:扫描下方二维码加入

九、期待你的反馈!
如果你在学习过程中有任何疑问,或者有好的建议和想法,欢迎在下方留言。我会尽快回复你的疑问。

十、下期预告
下一期,我们将继续学习Python编程进阶(二):多线程与多进程编程。我们将探讨如何使用线程和进程来提高程序的性能和效率。敬请期待!
版权声明
本文为原创内容,转载请注明出处。
喜欢这篇文章吗?
如果觉得本篇内容对你有帮助,请点击右下角的“赞”和“在看”,并分享给更多的朋友!你的支持是我持续创作的动力!❤️





