静态网页发送基本请求

目录

一、 发送 GET 请求

1.不携带 url 参数的 GET 请求

2.携带 url 参数的 GET 请求

二、发送 POST 请求

三、处理响应

1.获取网页源代码

 2.获取图片


一、 发送 GET 请求

        当用户在浏览器的地址栏中直接输入某个 URL 地址或者单击网页上的某个超链接时,浏
览器会使用 GET 方法向服务器发送请求。例如,在浏览器的地址栏中分别输入
https://www.baidu.com/ https://www.baidu.com/s?wd=python ,按 Enter 键后打开百度首页和
python 关键词的查询结果页面。此时我们用 Fiddler 工具捕获刚刚发送的两个请求,可以看到
这两个请求的请求方法都是 GET
        在 Requests 库中, get() 函数用于向服务器发送 GET 请求。该函数会根据传入的 URL
建一个请求(每个请求都是 Request 类的对象),之后将该请求发送给服务器。 get() 函数的声
明如下:
get(url, params=None, headers=None, cookies=None, verify=True,
proxies=None, timeout=None, **kwargs)
        上述函数中各参数的含义如下。
  •  url:必选参数,表示请求的 URL
  •  params:可选参数,表示请求的查询字符串。该参数支持 3 种类型的取值,分别为字
典、元组列表、字节序列。当该参数的值是一个字典时,字典的键为 url 参数,字典的值为 url
参数对应的值,例如 {"ie": "utf-8","wd": "python"}
  •  headers:可选参数,表示请求的请求头,该参数只支持字典类型的值。
  •  cookies:可选参数,表示请求的 Cookie 信息,该参数支持字典或 CookieJar 类的对象。第 3 章 抓取静态网页数据 045
  •  verify:可选参数,表示是否启用 SSL 证书,默认值为 True
  •  proxies:可选参数,用于设置代理服务器,该参数只支持字典类型的值。
  • timeout:可选参数,表示请求网页时设定的超时时长,以秒为单位。
        下面分别以访问百度首页和 python 关键词的查询结果页面为例,演示如何使用 get() 函数  
发送不携带 url 参数和携带 url 参数的 GET 请求。

1.不携带 url 参数的 GET 请求

        若 GET 请求的 URL 中不携带参数,我们在调用 get() 函数发送 GET 请求时只需要给 url
数传入指定的 URL 即可。例如,使用 get() 函数发送 GET 请求访问百度首页,具体代码如下。
import requests 
# 准备 URL 
base_url = 'https://www.baidu.com/' 
# 根据 URL 构造请求,发送 GET 请求,接收服务器返回的响应信息
response = requests.get(url=base_url) 
# 查看响应码
print(response.status_code)
        上述代码中,首先定义了一个代表请求 URL 地址的变量 base_url ,然后调用 requests
中的 get() 函数发送 GET 请求。当百度服务器接收到请求后会返回响应信息,并将响应信息保
存到 response 中。最后通过访问 response status_code 属性查看响应状态码,以确认此次访
问是否成功。
运行代码,输出如下结果。
200
从输出的结果可以看出,服务器返回的响应状态码为 200 ,说明成功访问了百度首页。

2.携带 url 参数的 GET 请求

        如果 GET 请求的 URL 中携带参数,那么我们在调用 get() 函数时可以采用两种方式发送
GET 请求。第 1 种方式是将参数以“ ? 参数名 1= 1& 参数名 2= 2... ”的形式拼接到 URL
面,进而手动构建完整的 URL ,例如 https://www.baidu.com/s?wd=python ,并将完整的 URL
传入 url 参数;第 2 种方式是将 url 参数转换为字典,之后将该字典传入 params 参数。
1 种方式的实现代码如下。
import requests 
base_url = 'https://www.baidu.com/s' 
param = 'wd=python' 
# 拼接完整的 URL 
full_url = base_url + '?' + param 
# 根据 URL 构造请求,发送 GET 请求,接收服务器返回的响应信息
response = requests.get(full_url) 
# 查看响应码
print(response.status_code)
运行代码,输出如下结果。
200
2 种方式的实现代码如下。

 

import requests 
base_url = 'https://www.baidu.com/s' 
wd_params = {'wd': 'python'} 
# 根据 URL 构造请求,发送 GET 请求,接收服务器返回的响应
response = requests.get(base_url, params=wd_params) 
# 查看响应码
print(response.status_code)
运行代码,输出如下结果。
200
通过观察两次的输出结果可知,服务器返回的响应状态码都为 200 。这说明我们成功访问
python 关键词的查询结果页面。

 

二、发送 POST 请求

        如果网页上 form 表单的 method 属性的值为 POST ,那么当用户提交表单时,浏览器将使
POST 方法提交表单内容,并将各个表单元素及数据作为 HTTP 请求信息中的请求数据发
送给服务器。例如登录美多商城时发送的请求是 POST 请求。此时使用 Fiddler 工具捕获该请
求,可以看到发送该请求时的请求数据,具体如图 3-1 所示。

 

Requests 中, post() 函数用于向服务器发送 POST 请求。该函数会根据传入的 URL 构建
一个请求,将该请求发送给服务器,并接收服务器成功响应后返回的响应信息。 post() 函数的
声明如下:
post(url, data=None, headers=None, cookies=None, verify=True, proxies=None, timeout=None, json=None, **kwargs)
        post()与 get() 函数的参数大致相同,除了 get() 函数中介绍过的参数以外, post() 函数中其
他参数的含义如下。
  • data:可选参数,表示请求数据。该参数可以接收 3 种类型的值,分别为字典、字节
序列和文件对象。当参数值是一个字典时,字典的键为请求数据的字段,字典的值为请求数
据中该字段对应的值,例如 {"ie": "utf-8","wd": "python"}
  •  json:可选参数,表示请求数据中的 JSON 数据。
下面以美多商城网站为例,为大家演示如何使用 post() 函数请求美多商城网站首页,具体
代码如下。
import requests 
base_url = 'http://mp-meiduo-python.itheima.net/login/' 
# 准备请求数据
form_data = { 'csrfmiddlewaretoken': 
'FDb8DNVnlcFGsjIONtwiQoi6PtmCLeBsRgyjx2o2nsZ4MXDEGDeM2dUImEkj9O7t', 'username': 'admin', 'pwd': 'admin', 'remembered': 'on' 
} 
# 根据 URL 构造请求,发送 POST 请求,接收服务器返回的响应信息
response = requests.post(base_url, data=form_data) 
# 查看响应信息的状态码
print(response.status_code)
运行代码,输出如下结果。
200
从输出结果可以看出,服务器返回的响应状态码为 200 。这说明我们成功访问了美多商
城网站首页。

 

三、处理响应

        当服务器返回的响应状态码为 200 时,说明本次 HTTP 请求成功,此时可以接收到由服
务器返回的响应信息。在 Requests 库中, Response 类的对象中封装了服务器返回的响应信息,
那些响应信息包括响应头和响应内容等。除了前面介绍的 status_code 属性之外, Response
还提供了一些其他属性。 Response 类的常用属性如表 3-1 所示。
        在表 3-1 中, text 属性和 content 属性都可以获取响应内容。其中, text 属性会根据
Requests 库推测的编码方式将响应内容编码为字符串类型的数据; content 属性用于获取二进
制形式的响应内容。若需要从响应内容中提取文本,则可以使用 text 属性获取响应内容;若
需要从响应内容中提取图片、文件等,则可以使用 content 属性获取响应内容。
接下来,为大家演示如何使用 text 属性和 content 属性获取网页源代码和图片。

1.获取网页源代码

        通过访问 Response 类的对象的 text 属性可以获取字符串形式的网页源代码。例如,访问 3.2.1
节请求百度首页示例中 Response 对象的 text 属性获取百度首页源代码,具体代码如下。
# 获取网页源代码
print(response.text)
        运行代码,控制台输出了一段 HTML 代码。由于这段代码的格式比较混乱,所以我们在
这里按 HTML 标准格式调整了代码,调整后的结果如下。
<!DOCTYPE html> 
<!--STATUS OK--> 
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta content="always" name="referrer" /> <link rel="stylesheet" type="text/css" href="https://ss1.bdstatic.com/ 5eN1bjq8A 
AUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" /> 
<title>&ccedil;™&frac34;&aring;&ordm;&brvbar;&auml;&cedil; &auml;&cedil;‹&iuml;
&frac14;Œ&auml;&frac12; &aring;&deg;&plusmn;&ccedil;Ÿ&yen;&eacute; "</title> </head> <body link="#0000cc"> ......(部分省略)</div> </div> </div> </body> 
</html>
        对照浏览器中查看的百度首页的源代码可知,标签<title> 中的中文没有正常显示,而是出
现了乱码。这是因为 Requests 库推测的编码格式 ISO-8859-1 与百度首页实际使用的编码格式
UTF-8 不一致。此时需要通过 Response 对象的 encoding 属性将编码格式设置为 UTF-8
        在 3.2.1 节请求百度首页示例中发送请求的代码之后,增加设置 Response 对象编码格式的
代码,改后的代码如下。
import requests 
# 准备 URL 
base_url = 'https://www.baidu.com/' 
# 根据 URL 构造请求,发送 GET 请求,接收服务器返回的响应信息
response = requests.get(url=base_url) 
# 设置响应内容的编码格式
response.encoding = 'utf-8' 
# 查看响应内容
print(response.text)

再次运行代码,输出如下结果。 

<html> <head></head> <body link="#0000cc"> <!--STATUS OK--> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta content="always" name="referrer" /> <link rel="stylesheet" type="text/css" href="https://ss1.bdstatic.com/5eN1bjq8 
AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" /> <title>百度一下,你就知道</title> ……(部分省略)</body> 
</html>
从输出结果可以看出,网页源代码中的中文已经能够正常显示了。

 2.获取图片

        百度首页上除了文字信息之外,还包含一个百度标志(Logo )图片。若希望获取百度 Logo
的图片,则需要先根据该图片对应的请求 URL 发送请求,再使用 content 属性获取该图片对
应的二进制数据,并将数据写入本地文件中,具体代码如下。
import requests 
base_url = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png' 
response = requests.get(base_url) 
# 获取百度 Logo 图片对应的二进制数据
print(response.content) 
# 将二进制数据写入程序所在目录下的 baidu_logo.png 文件中
with open('baidu_logo.png', 'wb') as file: file.write(response.content)
运行代码,在程序所在的目录下可以看到新创建的文件 baidu_logo.png ,打开该文件后显
示的内容如图 3-2 所示。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海量数据处理利器 Roaring BitMap 原理介绍

作者&#xff1a;来自 vivo 互联网服务器团队- Zheng Rui 本文结合个人理解梳理了BitMap及Roaring BitMap的原理及使用&#xff0c;分别主要介绍了Roaring BitMap的存储方式及三种container类型及Java中Roaring BitMap相关API使用。 一、引言 在进行大数据开发时&#xff0c;…

公域+私域运营思路框架

本次分享公域私域运营思路框架&#xff0c;内容包括私域原则、公域引流、让利思维、价值体系等内容&#xff0c;让你的流量保持高留存、高活跃。

idea 创建properties文件,解决乱码

设置properties文件编码 点击file->Settings File Encodings->设置utf-8 重新创建.properties文件才生效

【Java学习笔记】异常处理

生活中我们在使用一些产品的时候&#xff0c;经常会碰到一些异常情况。例如&#xff0c;使用ATM机取钱的时&#xff0c;机器会突然出现故障导致无法完成正常的取钱业务&#xff0c;甚至吞卡&#xff1b;在乘坐地铁时&#xff0c;地铁出现异常无法按时启动和运行&#xff1b;使用…

本科且非专业学历|艺术自由职业者成功赴美国威斯康星大学麦迪逊分校自费访学

R老师只有本科学历且不是艺术专业&#xff0c;但有独创的艺术作品&#xff0c;其希望在一年的访问学者期间&#xff0c;拓宽艺术视野&#xff0c;同时学习艺术理论&#xff0c;以弥补学术背景薄弱的短板。最终我们为其落实了美国威斯康星大学麦迪逊分校访问学者职位。 R老师背景…

IAR stack usage

c - IAR Stack Usage for STM32 in the map File - Stack Overflow

SAP FICO 下载文件报错【调用数据提供商错误】

报错如下图所示&#xff1a; 解决办法&#xff1a; 当弹出保存文件的提示时&#xff0c;不要点击“记住我的决定”

【MATLAB】语法

MATLAB 基本语法(%{和%}) 赋值 函数名值&#xff1b;for for i1:10循环语句 end//while x0; sum0; while x<100sumsumx;x; end//if if x > 1f x^2 1; elsef 2 * x endswitch onum input(请输入一个数); switch num case -1 //注意case后面没有冒号disp(I am…

昇思25天学习打卡营第1天|基本介绍及快速入门

1.第一天学习总体复盘 1&#xff09;成功注册昇思大模型平台&#xff0c;并成功申请算力&#xff1b; 2)在jupyter环境下学习初学入门/初学教程的内容&#xff1b; 在基本介绍部分&#xff0c;快速撸了一边内容&#xff0c;有了一个基本的了解&#xff08;没理解到位的计划采用…

【尝鲜】SpringCloudAlibaba AI 配置使用教程

1、环境配置 maven依赖pom.xml 注意配置远程仓库&#xff0c;原因见&#xff1a;Unresolved dependency: ‘org.springframework.ai:spring-ai-core:jar:0.8.1’ <dependencies><!--Base--><dependency><groupId>org.springframework.boot</group…

用qq邮箱发送邮件验证码java

添加依赖 <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version> </dependency>配置邮箱 实现代码 package com.example.demo.service; import org.springframework.st…

芜湖!恒驰大数据迁移案例荣幸亮相“东数西算”芜湖集群创新大会暨华为云华东(芜湖)数据中心全球开服活动

6月13日至14日&#xff0c;“东数西算”芜湖集群创新大会暨华为云华东&#xff08;芜湖&#xff09;数据中心全球开服活动在安徽芜湖隆重举办&#xff0c;标志着“东数西算”芜湖集群正式上线、华为云全国存算网的枢纽节点布局全面完成。 本次活动由华为技术有限公司主办、芜湖…

金属配件加工厂设备远程监控

随着科技的飞速发展&#xff0c;智能制造已成为制造业转型升级的重要方向。在金属配件加工领域&#xff0c;设备的稳定运行和高效管理对于提升产品质量、降低生产成本至关重要。HiWoo Cloud平台凭借其强大的远程监控功能&#xff0c;为金属配件加工厂提供了全新的解决方案&…

Android SurfaceFlinger——服务启动流程(二)

SurfaceFlinger 是 Android 系统中的一个核心服务&#xff0c;负责管理图形缓冲区的合成和屏幕显示&#xff0c;是 Android 图形系统的关键组件。 一、启动流程 SurfaceFlinger 作为一个系统服务&#xff0c;在 Android 启动早期由 init 进程通过 servicemanager 启动。它是作…

【黑马TS】学习资料Day4

五、在 React 中使用 TypeScript 现在&#xff0c;我们已经掌握了 TS 中基础类型、高级类型的使用了。但是&#xff0c;如果要在前端项目开发中使用 TS&#xff0c;还需要掌握 React、Vue、Angular 等这些库或框架中提供的 API 的类型&#xff0c;以及在 TS 中是如何使用的。 …

作为一名程序员,最大的成就感来自哪里?

说在前面 &#x1f388;作为一名程序员&#xff0c;我们的生活充满了挑战与创造。在成千上万行代码的背后&#xff0c;我们的成就感来源于何处&#xff1f;是解决问题的瞬间&#xff0c;是产品发布的一刻&#xff0c;还是用户的一声赞叹&#xff1f; 解决问题的瞬间 每当我们调…

AI写作平台:提升文档撰写效率的神器

工欲善其事&#xff0c;必先利其器。 随着AI技术与各个行业或细分场景的深度融合&#xff0c;日常工作可使用的AI工具呈现出井喷式发展的趋势&#xff0c;AI工具的类别也从最初的AI文本生成、AI绘画工具&#xff0c;逐渐扩展到AI思维导图工具、AI流程图工具、AI生成PPT工具、AI…

驱动层透明加密技术是什么?

驱动层透明加密技术的应用场景主要集中在确保数据在存储、传输和使用过程中的安全性&#xff0c;特别是在需要严格控制文件访问和防止数据泄露的场合。以下是几个具体的应用场景&#xff0c;结合参考文章中的相关信息进行归纳&#xff1a; www.weaem.com 内部文件流通&#xf…

【索引】数据库索引之顺序索引概述

目录 1、索引的基本概念 2、顺序索引 3、稠密索引和稀疏索引 3.1 什么是稠密索引&#xff1f; 3.2 什么是稀疏索引&#xff1f; 4、索引的更新 4.1 索引的插入操作 4.1 索引的删除操作 5、辅助索引 1、索引的基本概念 数据库中的索引与图书馆中书的索引作用相同&#xf…

Spire.PDF for .NET【文档操作】演示:如何删除 PDF 中的图层

借助Spire.PDF&#xff0c;我们可以在新建或现有pdf文档的任意页面中添加线条、图像、字符串、椭圆、矩形、饼图等多种图层。同时&#xff0c;它还支持我们从pdf文档中删除特定图层。 Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作 PD…