当前位置: 首页 > news >正文

Python 网络通信

0x01 urllib.request 模块

发送 GET 请求

如果要发送 HTTP/HTTPS 的 GET 请求,则可以使用 urllib.request 模块的 Request 对象。

from urllib import request
url = "http://www.baidu.com"   # 需要访问的地址
req = request.Request(url)   # 获取请求对象
with request.urlopen(req) as response:   # 开始请求data = response.read()   # 读取响应数据data = data.decode("utf-8")   # 解码,不然会乱码code = response.getcode()   # 获取响应码print(code)print('~~~~~~~~~~~~~~~~~~~~~~~~~~')rep_url = response.geturl()   # 获取响应数据的URLprint(rep_url)print('~~~~~~~~~~~~~~~~~~~~~~~~~~')print(data)

发送 POST 请求

如果要发送 HTTP/HTTPS 的 POST 请求,则其发送流程与发送 GET 请求非常类似。

from urllib import request   #用于发送 HTTP 请求并处理响应
from urllib import parse   #用于将字典参数编码为 URL 查询字符串格式
url = "http://xx.xx.xx.xx/vul/xss/xsspost/post_login.php"   # 需要访问的地址
params = {"username": "admin", "password": "123456"}   # 准备POST参数
params_str = parse.urlencode(params)   # 编码
print(params_str)
params_bytes = params_str.encode()   # 将参数字符串转换成字节序列,POST 发送数组需要字节序列的形式发送
req = request.Request(url, data=params_bytes)   # 准备请求对象
with request.urlopen(req) as response:   # 开始请求code = response.getcode()   # 获取响应状态码print(code)data = response.read().decode()   # 获取响应体数据print(data)

下载文件

from urllib import request   #用于发送网络请求并处理响应
import os   #用于与操作系统交互,如路径操作和文件管理
url = "http://www.test.com"   # GET 请求,需要访问的地址
base_path = os.path.abspath('.')   # 当前文件的地址
file_path = os.path.join(base_path, "teacher.html")   # 下载文件的path
request.urlretrieve(url, filename=file_path)

0x02 requests 模块

上面我们介绍了 urllib 模块的使用,有一个比 urllib 更加"人性化"的模块,那就是 requests 库,使用它可以更加便捷的发起各种请求。
安装 requests 模块:pip install requests
image

发送 GET 请求

简单请求

import requests
url="http://www.test.com"
res=requests.get(url)
data=res.text
print(data)

添加请求头

import requests
url="https://www.test.com"
header={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198Safari/537.36'
}
res=requests.get(url)
data=res.text
print(data)

添加请求参数

import requests
url = "http://www.test.com/views/detailsp.php"
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198Safari/537.36'
}
params = {
'id': 1
}
res = requests.get(url=url, params=params, headers=header)
data = res.text
print(data)

响应字符编码设置

import requests
url = "http://www.test.com"
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198Safari/537.36'
}
params = {
'id': 10
}
res = requests.get(url=url, params=params, headers=header)
data = res.text
print(data)
print(res.content.decode("utf-8"))

查看请求 URL,响应编码,状态码

import requests
url = "http://www.test.com"
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198Safari/537.36'
}
params = {
'id': 10
}
res = requests.get(url=url, params=params, headers=header)
print(res.url)
print(res.encoding)
print(res.status_code)

获取响应的 cookie

import requests
url = "http://www.test.com"
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198Safari/537.36'
}
params = {
'id': 10
}
res = requests.get(url=url, params=params, headers=header)
print(res.url)
print(res.encoding)
print(res.status_code)
cookie_data = list(res.cookies)
for cookie in cookie_data:print(cookie.value)

发送 POST 请求

和 GET 一致,只是方法名字变成了 POST。

import requests
url = "http://www.baidu.com"
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
data = {
'wd': 'python'
}
res = requests.post(url=url, headers=header, data=data)
print(res.url)
print(res.encoding)
print(res.status_code)
print(res.content.decode("utf-8"))

挂代理

请求时,先将请求发给代理服务器,代理服务器请求目标服务器,然后目标服务器将数据传给代理服务器,代理服务器再将数据给爬虫。
直接请求

import requests
url = "http://httpbin.org/ip"
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
res = requests.get(url=url, headers=header)
print(res.text)
#结果:显示的是自己的IP

利用代理请求

import requests
url = "http://httpbin.org/ip"
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
proxy = {
'http': 'http://127.0.0.1:7890',
'https': 'http://127.0.0.1:7890'
}
res = requests.get(url=url, proxies=proxy, headers=header)
print(res.text)

爬虫实战

将官网大咖讲师名字和职位爬取出来,写进 csv 里面。

import requests
import re
teachers = []
def get_teachers(url):"""获取老师的方法:param url::return:"""res = requests.get(url)pattern = r'<h6>(\w+)<span>(\w+)</span></h6>'res = re.findall(pattern, res.content.decode('utf-8'))return res
for page in range(1, 4):url = 'http://www.test.com/teacher'if page > 1:url = url + '-' + str(page) + '.html'else:url = url + '.html'teachers += get_teachers(url)
for item in teachers:print("{0}:{1}".format(item[0], item[1]))
http://www.jsqmd.com/news/364611/

相关文章:

  • 解决机器人模仿学习数据难题:从采集到预处理的完整技术指南
  • 4个步骤搞定开源笔记管理:Joplin多设备知识同步解决方案
  • 智能学术写作工具:武汉大学论文模板如何提升论文效率?
  • KCD Beijing + vLLM 2026 议题征集中!
  • 设计模式Trustworthy Generation:提升RAG信赖度
  • 开源IPTV播放器IPTVnator:突破传统电视观看体验的完整解决方案
  • 【第1章 计算机、程序与C语言】-1.4程序的编写、编译与运行全流程
  • 2026年知名的卧螺离心机/丽水卧螺式离心机厂家采购参考指南(必看) - 品牌宣传支持者
  • 零基础搭建智能量化交易系统:本地化部署实用指南
  • 2026年比较好的促进剂CZ/促进剂TMU生产厂家推荐与采购指南 - 品牌宣传支持者
  • 2026年变频变压电源生产厂家有哪些?进出线电抗器厂家TOP榜/优质电抗器厂家推荐 - 栗子测评
  • 3大突破点:用Bibliometrix提升文献计量分析效率的完整指南
  • 3步打造开源笔记知识管理系统:跨平台效率提升指南
  • 旋转目标检测技术突破与实战落地指南
  • 2024开源笔记新选择:Joplin全平台部署指南
  • 开源代理服务器Jackett:一站式种子搜索与下载解决方案
  • smartmontools 2024实战指南:磁盘健康监控从入门到精通
  • 轻量级Linux系统容器化部署实战手记:Alpine与Podman的边缘计算优化之道
  • 突破异构算力资源调度瓶颈:企业级资源管理技术革新与实践
  • 如何让Android模拟器性能提升5倍?20个实用优化技巧全解析
  • 告别重复操作:用you-get实现URL批量下载自动化的效率工具指南
  • 开源Switch模拟器Sudachi:突破平台限制的游戏技术探索
  • 4个维度解析Supermemory:重新定义AI对话体验的记忆革命
  • 2026年推荐控制变压器厂家:三相变压器厂家推荐/优质变压器厂家盘点 - 栗子测评
  • 跨平台移动设备自动化实战指南:Midscene.js多设备协同解决方案
  • 2026年热门的不锈钢固溶时效热处理/钎焊热处理厂家采购参考指南 - 品牌宣传支持者
  • build-your-own-x 技术探索指南:从零构建你的编程技能地图
  • 3步技术突破:Cursor Pro无限体验实现指南
  • 如何3分钟搞定专业发票?这款工具让财务工作效率提升80%
  • 打造专属音乐体验:用NSMusicS构建个性化音乐空间