静态网页发送基本请求

目录

一、 发送 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;…

网络安全,怎么搭建Python防范环境

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程: Python网络安全项目开发实战_搭建Python防范环境_编程案例解析实例详解课程教程.pdf 构建一个Python环境下的网络安全防范体系是一个涉及多个层面和步…

公域+私域运营思路框架

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

常用的特征分析和特征工程

案例背景 我们将使用一个公开数据集,数据集中包含客户的画像、行为以及标签。我们的目标是通过特征工程提升模型的预测准确性。 数据加载与初步探索 首先,我们需要加载数据并进行初步探索,以了解数据的基本情况。 import pandas as pd import numpy as np# 加载数据集 d…

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

7、PHP 实现矩形覆盖

题目&#xff1a; 矩形覆盖 描述&#xff1a; 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形&#xff0c;总共有多少种方法&#xff1f; <?php function rectCover($number) {$prePreNum 1;$preNum 2;$temp 0;i…

vscode格式化c代码

参考链接&#xff1a; Clang-Format 用法详解 https://blog.csdn.net/wan212000/article/details/131709197 # 左花括号后面不换行 BreakBeforeBraces: Attach # 缩进 IndentWidth: 4 # 行宽&#xff0c;不自动换行 ColumnLimit: 0在设置界面&#xff0c;Extensions > C/C …

Maven安装与配置、入门教程

Maven是一款基于Java平台的项目管理和整合工具&#xff0c;它主要通过项目对象模型&#xff08;POM&#xff09;来管理项目的构建、报告和文档。以下是一个清晰的Maven教程概述&#xff0c;参考了多篇文章的内容&#xff1a; 一、Maven简介 诞生背景&#xff1a;Maven的创始人…

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

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

BufferedReader和BufferedWriter

概念 BufferedReader&#xff1a;是一个从字符输入流中读取文本的类。它提供了一个缓冲区&#xff0c;可以一次性读取大量数据&#xff0c;从而减少实际读取操作的次数&#xff0c;提高读取效率。 BufferedWriter&#xff1a;是一个将文本写入字符输出流的类。它提供了一个缓…

【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…

【Linux】Linux简介

Linux是一种自由和开放源码的类Unix操作系统&#xff0c;其核心由林纳斯本纳第克特托瓦兹&#xff08;Linus Benedict Torvalds&#xff09;于1991年10月5日首次发布。 起源与发展&#xff1a; Linux最初是作为Unix操作系统的一种克隆系统而诞生的&#xff0c;旨在提供一个免费…

[杂项:书籍]《生命的品质》

第八辑&#xff1a; 书 * 对于忙&#xff0c;我始终有一种警惕。我确立了两个界限&#xff0c;第一要么忙得愉快&#xff0c;只为自己真正喜欢的事忙&#xff0c;第二要忙得有分寸&#xff0c;做多么喜欢的事也不让自己忙昏了头。 我 * 对于第一点&#xff0c;我做不到&#…

PostgreSQL17优化器改进(5)GROUP BY优化

PostgreSQL17优化器改进(5)GROUP BY优化 我们知道GROUP BY聚集有两种常见实现方式&#xff0c;一种是基于哈希表&#xff0c;我们称为哈希聚集&#xff08;Hash agg&#xff09;&#xff1b;另一种则要求先对元组进行排序&#xff0c;我们称为分组聚集&#xff08;Group Agg&a…

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

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

win11使用qemu安装arm64 openEuler虚拟机 并虚拟机中在安装docker

1、安装openEuler教程&#xff1a;Windows11 上使用 QEMU 创建 aarch64&#xff08;ARM64&#xff09;虚拟机_tap-windows-9.24.7-i601-win10.exe-CSDN博客 2、虚拟机安装docker&#xff1a;Windows11 上使用 QEMU 创建 aarch64&#xff08;ARM64&#xff09;虚拟机_tap-windo…

【尝鲜】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…