Python,作为一种被广泛使用的高级编程语言,拥有许多优势,其中之一就是它的网络编程能力。Python的强大网络库如socket, requests, urllib, asyncio,等等,让它在网络编程中表现优秀。本文将深入探讨Python在网络编程中的应用,包括了基础的socket编程,到高级的异步IO网络编程,以及我们如何能够充分利用这些工具来开发网络应用。

Socket编程基础

Socket是网络编程的基石。Python的socket模块提供了一套简单的API,可以帮助我们快速地建立网络连接。让我们先来看一个简单的服务器和客户端之间通信的例子:

服务器端:

import socket

# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定端口
s.bind(('localhost', 12345)) # 设置最大连接数,超过后排队
s.listen(5) while True:
# 建立客户端连接
c, addr = s.accept()
print ('Got connection from', addr) # 发送数据
c.send('Thank you for connecting'.encode()) # 关闭连接
c.close()

客户端:

import socket              

# 创建 socket 对象
s = socket.socket() # 连接到服务器
s.connect(('localhost', 12345)) # 接收数据
print (s.recv(1024).decode())
s.close()

运行服务器端代码,然后运行客户端代码,输出如下:

Got connection from ('127.0.0.1', 51768)
Thank you for connecting

这里使用的是TCP协议进行通信,TCP是一种面向连接的协议,它保证了两台计算机之间的稳定通信。

Socket编程基础及其实践

如上所述,Socket是网络编程的基石。Python的socket模块提供了一套简单的API,以帮助我们快速地建立网络连接。让我们通过一个聊天室应用来更深入地理解socket编程:

# 这是一个简单的命令行聊天室服务器

import socket
import select server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(10)
inputs = [server_socket] while inputs:
rs, _, _ = select.select(inputs, [], []) for r in rs:
if r is server_socket:
client_socket, _ = r.accept()
inputs.append(client_socket)
else:
msg = r.recv(1024)
if not msg:
inputs.remove(r)
else:
for socket in inputs:
if socket is not server_socket:
socket.send(msg)

这个服务器使用select模块来同时处理多个socket连接。当新的客户端连接进来时,它就将这个新的socket添加到输入列表中。当服务器收到一个消息时,它就将这个消息转发给所有其他的客户端。

HTTP网络请求

在Python中,我们常常使用requests库进行HTTP请求。它的使用方法非常直观,让我们看一个简单的例子:

import requests

# 发起 GET 请求
response = requests.get('https://www.example.com') # 输出响应的文本信息
print(response.text)

HTTP网络请求及其高级用法

在Python中,我们常常使用requests库进行HTTP请求。然而,requests库除了基础的GET,POST请求之外,还支持更多高级的功能,比如session对象、cookie处理和代理设置等。

比如我们可以使用session对象来维持一个会话,这在需要登录后才能访问的网站上非常有用:

import requests

s = requests.Session()

# 先进行登录
s.post('http://httpbin.org/post', data = {'key':'value'}) # 然后访问需要登录后才能看到的页面
r = s.get('http://httpbin.org/cookies')
print(r.text)

异步IO网络编程

Python的 asyncio 库为我们提供了异步IO的能力,让我们可以在网络编程中实现更高效的IO操作。下面是一个简单的异步网络请求的例子:

import asyncio
import aiohttp async def fetch(session, url):
async with session.get(url) as response:
return await response.text() async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://python.org')
print(html) loop = asyncio.get_event_loop()
loop.run_until_complete(main())

网络数据抓取

Python的网络编程能力也使其成为网络数据抓取的绝佳工具。比如我们可以使用BeautifulSoup库来解析HTML,并抓取我们需要的信息:

import requests
from bs4 import BeautifulSoup # 发起请求
r = requests.get('http://example.com') # 解析HTML
soup = BeautifulSoup(r.text, 'html.parser') # 抓取所有的链接
links = [a['href'] for a in soup.find_all('a', href=True)]
print(links)

Web开发

Python在Web开发方面也表现出色。比如我们可以使用Flask库来快速地开发一个web应用:

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def hello():
return render_template('index.html') if __name__ == "__main__":
app.run()

Flask可以让我们快速地创建一个web应用,而且它还支持路由、模板渲染和静态文件等web开发的基础功能。

FTP服务

你知道Python还可以作为一个FTP服务器吗?pyftpdlib是一个强大的,高度可配置的FTP服务器库。它支持FTP的大部分命令,而且由于它是纯Python编写的,所以在任何Python支持的平台上都可以运行。

One More Thing...

最后,让我分享一个很有用但又很少人知道的技巧:使用Python的http.server

块快速创建一个简单的web服务器。只需要在命令行中输入以下命令:

python -m http.server

这条命令将在你的机器上启动一个简单的HTTP服务器,默认端口为8000。这对于快速分享文件或者进行一些简单的web开发非常有用。

以上就是Python在网络编程方面的基础知识和一些高级用法,希望这些信息能对你有所帮助。

如有帮助,请多关注

个人微信公众号:【Python全视角】

TeahLead_KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。

深入Python网络编程:从基础到实践的更多相关文章

  1. python网络编程——socket基础篇

    python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...

  2. Python网络编程(基础总结、 入门经典)

    Linux下文件类型:     bcd -lsp          b(块.设备文件)          c(字符设备文件)          d(目录)          -(普通文件)       ...

  3. Python网络编程之基础

    计算机网络基础 网络到底是什么?计算机之间如何通信的? 早期:联机 以太网:局域网与交换机 ******广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发, 所 ...

  4. 图解Python网络编程

    返回目录 本篇索引 (1)基本原理 (2)socket模块 (3)select模块 (4)asyncore模块 (5)asynchat模块 (6)socketserver模块 (1)基本原理 本篇指的 ...

  5. Python网络编程基础pdf

    Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...

  6. python六十七课——网络编程(基础知识了解)

    网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...

  7. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程 并行与并发 同步与异步 阻塞与非阻塞 CPU密集型与IO密集型 线程与进程 进 ...

  8. 好书推荐---Python网络编程基础

    Python网络编程基础详细的介绍了网络编程的相关知识,结合python,看起来觉得很顺畅!!!

  9. Python网络编程基础|百度网盘免费下载|零基础入门学习资料

    百度网盘免费下载:Python网络编程基础|零基础学习资料 提取码:k7a1 目录: 第1部分 底层网络 第1章 客户/服务器网络介绍 第2章 网络客户端 第3章 网络服务器 第4章 域名系统 第5章 ...

  10. Python网络编程基础 PDF 完整超清版|网盘链接内附提取码下载|

    点此获取下载地址提取码:y9u5 Python网络编程最好新手入门书籍!175个详细案例,事实胜于雄辩,Sockets.DNS.Web Service.FTP.Email.SMTP.POP.IMAP. ...

随机推荐

  1. 为什么我推荐你使用 systemd timer 替代 cronjob?

    概述 前几天在使用 Terraform + cloud-init 批量初始化我的实验室 Linux 机器.正好发现有一些定时场景需要使用到 cronjob, 进一步了解到 systemd timer ...

  2. [Java]排序算法>交换排序>【快速排序】(O(N*logN)/不稳定/N较大/无序/仅顺序存储)

    1 快速排序 1.1 算法思想 快速排序是由冒泡排序改进而得的. 在冒泡排序过程中,只对相邻的2个记录进行比较:因此,每次交换2个相邻记录时,只能消除1个逆序. 若能通过2个(不相邻)记录的1次交换, ...

  3. 使用VScode进行Python开发

    一.Microsoft Store中安装:terminal 二.PowerShell中执行: [win10新版或者win11使用: 单个命令安装运行 WSL 所需的一切内容(需要重启计算机):wsl ...

  4. super 与 this 关键字

    super与this用法相似: 1.普通的直接引用 2.形参与成员名字重名,用 this 来指代类本身,super指代父类 public class Students extends Person { ...

  5. Go语言核心知识回顾(接口、Context、协程)

    温故而知新 接口 接口是一种共享边界,计算机系统的各个独立组件可以在这个共享边界上交换信息,在面向对象的编程语言,接口指的是相互独立的两个对象之间的交流方式,接口有如下好处: 隐藏细节: 对对象进行必 ...

  6. 分享一个开源的windows安卓投屏工具,scrcpy

    看到scrcpy可能很多人会以为是大名鼎鼎的Scrcpy(一个十分强大的多线路爬虫框架),sorry今天分享的主角不是他,而是他: github地址:https://github.com/Genymo ...

  7. vue3的setup语法糖

    https://blog.csdn.net/weixin_44922480/article/details/127337914 https://blog.csdn.net/m0_63108819/ar ...

  8. Python Requets库学习总结

    快速开始 发送请求 >>> import requests >>> r = requests.get('https://api.github.com/events' ...

  9. P5356 [Ynoi2017] 由乃打扑克

    md调了5h才调出来恶心坏了没想到这么快就做了第二道Ynoi 据说这题其实不卡常 屠龙宝刀点击就送 题面也很清楚,给定两种操作,一种是区间加,一种是询问区间内第 k 小的数的值是多少. 对于区间加,在 ...

  10. 大家都在用-神奇的Markdown格式

    概述 Markdown 是一种轻量级标记语言,它可以使我们专注于写作内容,而不用过多关注排版,很多博主.作家等都用它来撰写文章~ 本文将给各位小伙伴介绍 Markdown 语法的使用,本篇文章索奇就是 ...