Http请求的Python实现
一、urllib实现: urllib是Python中的内置模块
实现一个完整的请求与响应模型:urllib提供一个基础函数urlopen,通过向指定的url发出请求来获取数据。
import urllib.request
response = urllib.request.urlopen('http://www.zhihu.com')
html = response.read()
print(html)
二、httplib/urllib实现: httplib模块是一个底层基础模块,可以看到建立http请求的每一步,但是实现的功能比较少,在Python爬虫开发中基本上用不到。
三、Requests实现:是Python爬虫开发中最为常用的方式。Requests库是第三方模块,需要额外进行安装
pip3 install requests
1、实现完整的请求响应模型
(1)get方式:
import requests
r = requests.get('http://www.baidu.com')
print(r.text)
(2)post方式:
import requests
r = requests.post('http://www.baidu.com',data={‘key’:’value’})
print(r.text)
2、响应与编码“:
import requests
r = requests.get('http://www.baidu.com')
print('content----->'+str(r.content))
print('text----->'+r.text)
print('encoding----->'+r.encoding)
r.encoding = 'utf-8'
print('text----→'+r.text)
r.content:返回的是字节形式
r.text:返回的是文本形式
r.encoding:返回的是根据HTTP头猜测的网页编码格式
3、请求头headers处理:在Requests的get函数中添加headers参数即可
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
headers = {'User-Agent':user_agent}
r = requests.get('http://www.baidu.com',headers=headers)
print('content----→'+str(r.content))
4、响应码code和响应头headers处理
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
headers = {'User-Agent':user_agent}
r = requests.get('http://www.baidu.com',headers=headers)
if r.status_code == requests.codes.ok:
print(r.status_code) #响应码
print(r.headers) #响应头
print(r.headers.get('content-type'))#获取响应头的某个字段(推荐)
else:
r.raise_for_status()
注意:raise_for_status()函数是用来主动地产生一个异常,当响应码是4XX或5XX时,raise_for_status()函数会抛出异常,而响应码为200时,raise_for_status()函数返回None
5、Cookie处理:
(1)若响应中包含Cookie的值:
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
headers = {'User-Agent':user_agent}
r = requests.get('http://www.baidu.com',headers=headers)
for cookie in r.cookies.keys():
print(cookie+':'+r.cookies.get(cookie))
(2)自定义Cookie值发送出去:
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
headers = {'User-Agent':user_agent}
cookies = dict(name='maomi',age='3')
r = requests.get('http://www.baidu.com',headers=headers,cookies=cookies)
print(r.text)
(3)自动处理Cookie:不需要关心Cookie的值,只希望每次访问时,程序自动把Cookie带上
import requests
loginUrl = 'http://www.sina.com/login'
s = requests.Session()
#首先访问登录界面,作为游客,服务器会先分配一个cookie
r = s.get(loginUrl,allow_redirects=True)
datas = {'name':'maomi','passwd':'maomi'}
#向登录链接发送post请求,验证成功,游客权限转为会员权限
r = s.post(loginUrl,data=datas,allow_redirects=True)
print(r.text)
6、重定向和历史信息:处理重定向只是需要设置一下 allow_redirects字段即可,将 allow_redirects设置为True,则允许重定向;设置为False,则禁止重定向。如果允许重定向,则可以通过r.history字段查看历史信息
7、超时设置:通过参数timeout来进行设置
8、代理设置:使用代理Proxy,可以为任意请求方法通过设置proxies参数来配置单个请求
import requests
proxies = {
"http":"http://0.10.1.10:3318",
"https":"http://10.10.1.10:1080"
}
requests.get("http://example.org",proxies=proxies)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现