python requests Python用Requests发请求,简直爽到飞起,urllib哭晕在厕所
介绍首先让我们来看 官方的介绍Requests is an elegant and simple HTTP library for Python, built for human beings.翻成过来意思是: 是给人类所撰写的一个具备优雅特性且呈现简单状态的 HTTP 库。如今这段介绍已经足够直白明显 , 那就让我们首先率先去领略一番其威势力量。import requests # 发送请求 response requests.get(urlhttp://www.baidu.com/s, params{wd:python}) # 处理响应 print(response.status_code) # 输出结果 200这个请求如果用 来实现代码如下import urllib.parse import urllib.request url http://www.baidu.com/s params urllib.parse.urlencode({wd:python}) # 发送请求 response urllib.request.urlopen(?.join([url, params])) # 处理响应 print(response.getcode()) # 输出结果 200就从感官方面而言, 是能够瞧出来的, 运用起来, 于URL、参数等层面会繁杂一些。这仅仅只是冰山一角罢了, 在实际运用进程当中, 还存有好多层面超出, 它并非是徒有虚名, 在接下来的学习期间, 你便会体会到。安装使用pip命令$ pip3 install requests或者也可以使用 命令安装$ easy_install requests发送请求使用 发送网络请求非常简单。我们首先需要导入 模块import requests而后, 我们能够试着去获取某一网页。在这个例子当中, 我们要把那公共时间线来进行获取标点符号:r requests.get(https://api.github.com/events)当下, 存在一个名为r的对象, 凭借这个对象, 能够获取一切我们所期望的信息。容易操作的 API 表明所有 HTTP 请求种类都是一目了然的, 比如说, 你能够像这样去发送一个 HTTP POST 请求:r requests.post(http://httpbin.org/post, data {key:value})轻易, 是不是? 那另外的HTTP请求类别, 为PUT, , HEAD以及 又是咋办? 全都是同样的简便:r requests.put(http://httpbin.org/put, data {key:value}) r requests.delete(http://httpbin.org/delete) r requests.head(http://httpbin.org/get) r requests.options(http://httpbin.org/get)传递参数在我们发送请求之际, 常常得向服务端发送请求参数, 一般而言参数都是以键与值相对的那种形式放置到URL里头, 是跟于一个问号过后的。比如, /get?keyval。 准许你运用关键字参数, 借由一个字符串字典去提供这些参数。举个例子, 要是你想把key1及key2传递到 /get , 那么你能够采用像下面这样的代码: 。payload {key1: value1, key2: value2} r requests.get(http://httpbin.org/get, paramspayload) print(r.url) # 输出结果 http://httpbin.org/get?key1value1key2value2通过打印输出该 URL你能看到 URL 已被正确编码。需留意, 字典之中, 那些值为 None 的键, 皆不会被增添至 URL 的查询字符串之内。你还可以将一个列表作为值传入payload {key1: value1, key2: [value2, value3]} r requests.get(http://httpbin.org/get, paramspayload) # 输出结果 http://httpbin.org/get?key1value1key2value2key2value3响应内容举个例子, 就比如说以请求百度首页为例子来讲在这种情况下, 我们能够凭借返回去读取服务器响应的内容来达成某些事情。import requests r requests.get(http://www.baidu.com) print(r.text) #返回太多只显示一部分它能够自动进行解码, 针对来自服务器的内容来开展, 大多数字符集是可以被它无缝地予以解码的。在请求被发出之后, 会依据HTTP头部针对响应的编码得出有凭借的推测。当你去访问r.text的时候, 会运用其所推测出的文本编码。你能够借助r.去获取所使用的编码:r.encoding # 输出结果 utf-8并且能够使用 r. 属性来改变它r.encoding ISO-8859-1假设存在这样一种情况, 即要是你把编码进行了改变, 那么在每一次你去访问 r.text 的时候, 就都会去使用 r 的新值。二进制响应内容就非文本请求而言, 比如说那种图片请求, 你同样能够以字节这一形式去访问请求响应体。并且, 它还会自动地为你去解码gzip以及传输编码的响应数据。比如, 凭借要求回报的二进制数据去构建一幅图片, 你能够运用像下面这样的代码:import requests from PIL import Image from io import BytesIO r requests.get(http://img.sccnn.com/bimg/326/203.jpg) print(r.content) bi BytesIO(r.content) print(bi) i Image.open(bi) print(i) # 输出结果 b\xff\xd8\xff\xe0\x00\x10JFIF\x00\... _io.BytesIO object at 0x1112fdbf8JSON 响应内容里头存在着一个被设立于内部的JSON解码器装置在里边, 它能够给予援手帮你去处理那与JSON有关的数据材料:r requests.get(https://api.github.com/events) print(r.json()) # 输出结果 [{urepository: {uopen_issues: 0, uurl: https://github.com/...要是 JSON 解码遭遇失败这种情形, 那么 r.json() 便会抛出一个异常。r requests.get(https://www.baidu.com) print(r.json()) # 输出结果 json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)要留意的是, 成功调用 r.json() 并不表明响应是成功的 , 有的服务器会在失败的响应里包含一个 JSON 对象 , 像是 HTTP 500 的错误细节 , 这种 JSON 会被解码返回 , 要检查请求是否成功 , 请使用 r.() 或者检查 r. 是否与你的期望一致 , 标点符号请确保。原始响应内容在极少的情形之下, 你或许会打算去获取源于服务器的原始套接字回应, 那么你能够去访问r.raw。在这个时候要保证在初始请求当中设置了 True。具体而言你能够如此去做: 。r requests.get(https://api.github.com/events, streamTrue) print(r.raw) print(r.raw.read(10)) # 输出结果 \x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03设置请求头要是你在开展爬取某一页面内容的行为之际, 发觉所获取的数据呈现为空的状态, 然而经由浏览器直接去访问URL却并无问题, 在这种时候极有可能是你被服务器认定为爬虫用户了, 该怎么办才好呢? 我们理应去模拟浏览器进行请求, 在这个时候你需要针对请求增添HTTP头部信息, 仅仅只需简单地把一个dict传递给参数便可以达成了。例如我们设置一下 User-Agent url http://www.baidu.com headers {User-Agent: myagent/2.21.0} r requests.get(url, headersheaders) print(r.request.headers) # 输出结果 {User-Agent: myagent/2.21.0, Accept-Encoding: gzip, deflate, Accept: */*, Connection: keep-alive}能够瞧见, 所请求的 User - Agent, 已然转变成为所设置的 /2.21.0 了。复杂的 POST 请求每当我们运用那种 POST 请求之际, 去打印一回 r.text 的话, 就会发觉每一回都会呈现出几个关键字: 。{ args: {}, data: , files: {}, form: {}, headers: {}, json: null, origin: 221.232.172.222, 221.232.172.222, url: https://httpbin.org/post }在POST的参数里头能够设置这些关键字, 其中, 和args先前我们已然讲过, 它们分别代表请求头以及参数信息, 是指请求的路由ip, url是我们所请求的url, 其馀几个我们是能够进行设置的, 接下来我们就要瞧瞧其他几个关键字如何展开设置。设置data参数要是你于POST请求之际打算提交表单, 同样仅仅只需简便地递送一个字典给data参数就行。你那个数据字典在发起请求之时会自行编码成为表单样式:payload {key1: value1, key2: value2} r requests.post(http://httpbin.org/post, datapayload) print(r.text) # 输出结果 { ... form: { key1: value1, key2: value2 }, ... }对于那 data 参数, 你同样能够去传入一个元组所构成的列表, 它就将会被自动地转换为一个列表。payload ((key1, value1), (key1, value2)) r requests.post(http://httpbin.org/post, datapayload) print(r.text) # 输出结果 { ... form: { key1: [ value1, value2 ] }, ... }设置 json 参数许可你运用json径直传送参数, 接着它便会被自行编码。payload {some: data} r requests.post(http://httpbin.org/post, jsonpayload) print(r.text) # 输出结果 { args: {}, data: {\some\: \data\}, files: {}, form: {}, headers: { Accept: */*, Accept-Encoding: gzip, deflate, Content-Length: 16, Content-Type: application/json, Host: httpbin.org, User-Agent: python-requests/2.21.0 }, json: { some: data }, origin: 221.232.172.222, 221.232.172.222, url: https://httpbin.org/post }留意, 在此处, 不但对json进行了赋值操作, 并且还自动给予data赋值, json内部的键值对也被自动编码到data里了。设置文件参数上传文件很简单files {file: open(test.txt, rb)} r requests.post(http://httpbin.org/post, filesfiles) print(r.text) # 输出结果 { ... files: { file: this is a file test }, ... }你也可以增加一个参数把字符串发送到上传的文件中例如files {file: (test.txt, some,data,to,send\nanother,row,to,send\n)} r requests.post(http://httpbin.org/post, filesfiles) print(r.text) # 输出结果 { ... files: { file: some,data,to,send\nanother,row,to,send\n }, ... }响应状态码和响应头我们能够从服务器回应的成果里面取得状态码以及响应头的资讯, 举例来说:r requests.get(http://httpbin.org/get) print(r.status_code) # 输出结果 200为方便引用还附带了一个内置的状态码查询对象print(r.status_code requests.codes.ok) # 输出结果 True我们还可以查看响应的响应头信息r requests.get(http://httpbin.org/get) print(r.headers) # 输出结果 {Access-Control-Allow-Credentials: true, Access-Control-Allow-Origin: *, Content-Encoding: gzip, Content-Type: application/json, Date: Wed, 18 Sep 2019 12:22:06 GMT, Referrer-Policy: no-referrer-when-downgrade, Server: nginx, X-Content-Type-Options: nosniff, X-Frame-Options: DENY, X-XSS-Protection: 1; modeblock, Content-Length: 183, Connection: keep-alive}要获取响应头的某个字段值我们可以这样print(r.headers[Content-Encoding]) # 输出结果 gzip如果一个响应中包含了 那么我们可以利用 变量来拿到:url http://example.com/some/cookie/setting/url r requests.get(url) r.cookies[example_cookie_name] # 输出结果 example_cookie_value以上所呈现出的程序, 仅仅只是属于样例范畴, 于运行该程序的情况下并不将会收获所得下文之反馈返回内容, 是需要包含着何种具体内容的响应才能够得以收获到的呢。另外可以利用 变量来向服务器发送 信息cookies dict(cookies_areworking) r requests.get(http://httpbin.org/cookies, cookiescookies) print(r.text) # 输出结果 { cookies: { cookies_are: working } }可以看到我们设置 参数后返回中就包含了我们设置的信息。为其设置不同的那些, 此所涉返回对象是这样一种情况, 它跟字典相仿具有那种适用性特质, 适宜于跨越域名以及跨越路径去运用的, 这就表明, 我们能够针对不一样的域名或者路径来进行相关设置的。你还能够将Jar传送至其中去呀:jar requests.cookies.RequestsCookieJar() #为路径/cookies设置cookie jar.set(tasty_cookie, yum, domainhttpbin.org, path/cookies) #为路径/elsewhere设置cookie jar.set(gross_cookie, blech, domainhttpbin.org, path/elsewhere) #请求路径为/cookies的URL url http://httpbin.org/cookies r requests.get(url, cookiesjar) print(r.text) # 输出结果 { cookies: { tasty_cookie: yum } }重定向与请求历史在默认情形之下, 除去 HEAD 请求之外, 会对所有重定向进行自动处理。可以使用响应对象的 方法来追踪重定向。它是一个对象的列表, 此对象列表依据从最老到最近的请求开展排序。例如 将所有的 HTTP 请求重定向到 HTTPSr requests.get(http://github.com) print(r.url) print(r.status_code) print(r.history) # 输出结果 https://github.com/ 200 []要是你运用的电脑是Mac, 当运行这段代码时出现报错, 即“: reset by peer”, 那你就得对你系统进行升级, 具体办法自行去百度搜索关键词“mac 更新”, 在更新好后就不会再呈现报错的情况了。我们还可以通过 参数禁用重定向处理r requests.get(http://github.com, allow_redirectsFalse) print(r.status_code) print(r.history) # 输出结果 301 []超时你能够借由进行设置, 把参数予以确定, 从而去告知, 在历经了借助该参数所设定的秒数时间过后, 停下用于等待回应所用的行为。requests.get(http://github.com, timeout0.001) # 输出结果 requests.exceptions.ConnectTimeout: HTTPConnectionPool(hostgithub.com, port80): Max retries exceeded with url: / (Caused by ConnectTimeoutError(, Connection to github.com timed out. (connect timeout0.001)))这里因设置极短超时时间致使请求停下等待响应, 进而引发报错, 要注意, 这仅对连接过程起作用, 和响应体的下载并无关联, 并非是整个下载响应的时间限定, 而是倘若服务器在特定秒数内未作出应答, 便会引发一个异常。

相关新闻

AI金相分析技术:计算机视觉在材料检测中的应用

AI金相分析技术:计算机视觉在材料检测中的应用

1. 项目背景与行业痛点金相显微镜作为材料科学领域的"眼睛",在金属材料分析、失效分析、质量控制等环节扮演着关键角色。传统金相分析流程中,操作人员需要手动调节显微镜、拍摄图像、标注特征、计算参数,整个过程耗时耗力且存在主观…

2026/7/26 3:50:01阅读更多 →
智能体注意力机制:原理、类型与应用实践

智能体注意力机制:原理、类型与应用实践

1. 智能体注意力机制的核心价值与设计原则想象一下,当你走进一家嘈杂的咖啡馆,周围充斥着咖啡机的轰鸣声、顾客的交谈声、背景音乐声。尽管有这么多声音同时涌入你的耳朵,你却能轻松地专注于对面朋友的谈话内容。这种神奇的能力就是人类大脑的…

2026/7/26 3:48:00阅读更多 →
小白网络验证2.6.3:免费Windows程序加密工具详解

小白网络验证2.6.3:免费Windows程序加密工具详解

1. 项目背景与核心功能解析这个名为"全新小白网络验证2.6.3"的免费工具,本质上是一个面向Windows程序开发者的多功能保护方案。我在软件保护领域深耕多年,见过太多开发者因为缺乏专业加密手段而导致程序被破解的情况。这个工具最吸引人的地方在…

2026/7/26 3:48:00阅读更多 →
AI视频自动化制作:技术实现与工作流优化

AI视频自动化制作:技术实现与工作流优化

1. 项目概述"AI视频自动化学习日记第一天"这个标题立刻让我联想到当下最热门的两个技术领域:AI视频生成和自动化工作流。作为一名长期关注AI技术落地的从业者,我深知视频创作领域正经历着从传统剪辑到智能生成的范式转变。这个项目很可能是在探…

2026/7/26 5:08:15阅读更多 →
Spring AI与Gemma 4构建企业级RAG知识库实战

Spring AI与Gemma 4构建企业级RAG知识库实战

1. 项目背景与核心价值去年在给某金融机构做技术咨询时,他们提出了一个典型需求:如何让内部业务文档的查询效率提升300%?这个需求直接催生了我对Spring AI与Gemma 4结合的深度实践。传统企业知识库最大的痛点在于:文档堆积如山却难…

2026/7/26 5:08:15阅读更多 →
Windows任务管理器进程详解:安全优化与系统资源释放

Windows任务管理器进程详解:安全优化与系统资源释放

1. 任务管理器进程解析:哪些能关?哪些不能碰?每次打开Windows任务管理器,面对密密麻麻的进程列表,你是不是也纠结过"这些进程都是干嘛的"、"哪些可以安全关闭"?作为一位常年帮朋友清理…

2026/7/26 5:08:15阅读更多 →
C++实现Logistic回归:从数学推导到工程实践

C++实现Logistic回归:从数学推导到工程实践

1. 项目概述:为什么要在C里实现Logistic回归?如果你正在学习机器学习,或者想在一个对性能有要求的C项目里嵌入一个轻量级的分类器,那么自己动手实现一个Logistic回归模型会是一个绝佳的起点。Logistic回归虽然名字里带“回归”&am…

2026/7/26 5:08:15阅读更多 →
健身行业同城高性价比引流方案 实操简单落地快效果还稳定

健身行业同城高性价比引流方案 实操简单落地快效果还稳定

行业背景数据表明,2025年国内健身门店单客平均获客成本已达162元,传统地推转化率不足0.3%,68%的中小健身场馆陷入“投流亏损、不投流缺客”的两难境地。不少场馆尝试短视频同城引流,但大多受限于专业能力不足、流量不精准、转化链…

2026/7/26 5:08:15阅读更多 →
AI大模型与OpenClaw框架:智能体技术的行业实践

AI大模型与OpenClaw框架:智能体技术的行业实践

1. AI大模型与OpenClaw:IT行业的范式变革过去一年,我亲眼见证了AI大模型如何从实验室里的新奇玩具,演变为真正能改变IT行业游戏规则的生产力工具。而OpenClaw作为开源智能体框架的出现,更是为这场变革按下了加速键。作为一名长期关…

2026/7/26 5:06:15阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/26 0:01:28阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/26 0:01:28阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/26 0:01:28阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/26 0:01:28阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/26 0:01:28阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/26 0:01:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/25 19:03:04阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/25 19:03:04阅读更多 →