Requests模组
requests
是一个非常流行的 Python 套件,用于发送 HTTP 请求。它的设计目的是使 HTTP 请求变得简单易用。以下是对 requests
套件的介绍:
主要特点
简单性:requests
的接口直观且易于使用,使得发送各种 HTTP 请求变得简单。灵活性:支持 GET、POST、PUT、DELETE 等多种 HTTP 方法。自动处理:自动处理诸如重定向、会话(sessions)、cookies 等常见任务。自定义和扩展性:允许使用者自定义头部(headers)、参数(params)、资料(data)和 JSON。丰富的功能:支持 SSL 请求、身份验证、代理设置等。基本使用
安装:可以透过 pip 安装 requests
:
pip install requests
GET 请求:获取网页内容
参数附加在 URL 上:GET 请求通常将参数附加在 URL 的末尾,参数之间用&
分隔,并且以 ?
开始。数据可见性:由于参数附加在 URL 上,因此 数据对任何人都是可见的
,这意味着敏感信息不应该通过 GET 方法传输。长度限制:URL 的长度有限制(由浏览器和伺服器决定),这意味着 GET 请求的 参数有长度限制
。适用于数据检索:GET 主要用于请求数据,而不是发送数据给伺服器。使用场景:用于请求页面、图片、执行查询等,通常不改变服务器状态。import requests# 直接在 URL 夹带参数response = requests.get('https://httpbin.org/get?key1=value1&key2=value2')print(response.text) # 输出网页内容# 参数不夹带在URLparams = {'key1': 'value1', 'key2': 'value2'}response = requests.get('https://httpbin.org/get', params=params)
POST 请求:提交表单
参数包含在请求主体中:POST 请求将数据作为请求主体发送
。这意味着参数不会出现在 URL 中。数据隐私性更好:由于数据不在 URL 中显示,因此 POST 方法 适合传输敏感或私密数据
。无长度限制:POST 请求 没有数据长度限制
,适用于大量数据的传输。适用于数据提交:POST 常用于向伺服器提交表单数据或上传文件。使用场景:用于提交表单、上传文件、进行交易等,可能会改变服务器状态或数据。payload = {'key1': 'value1', 'key2': 'value2'}response = requests.post('https://httpbin.org/post', data=payload)print(response.text)
常用方法
使用头部:
在 requests
模组中,HTTP 请求的头部(Headers)是关键的组成部分,用于在发送请求时向伺服器提供额外的上下文信息。头部是由一系列的键值对构成的,它们定义了请求的许多重要属性,如内容类型、用户代理、认证信息等。
头部的主要作用
用户代理(User-Agent):标识发出请求的客户端软件,常用于伺服器识别请求来源。内容类型(Content-Type):指定发送数据的格式,如application/json
、application/x-www-form-urlencoded
。接受(Accept):指定客户端能够接收的回应内容类型。认证(Authorization):包含用于认证的凭证,如基本认证的用户名和密码,或者是令牌。缓存控制(Cache-Control):指示缓存行为,如 no-cache
或 max-age
。接受语言(Accept-Language):指定客户端偏好的语言,用于内容协商。如何在 requests
中设置头部
在 requests
中,可以在发送请求时通过 headers
参数自定义头部:
headers = { 'User-Agent': 'MyApp/1.0', 'Accept': 'application/json', 'Authorization': 'Bearer <TOKEN>'}response = requests.get('https://httpbin.org', headers=headers)
头部注意事项
安全性:在设置头部时,应避免发送敏感信息,除非确保通讯过程的安全性(如使用 HTTPS)。合规性:应正确使用头部信息,尊重 HTTP 协议的标準和伺服器的要求,特别是在使用Authorization
头部时。常见头部设定
处理回应:
当使用 requests
模组进行 HTTP 请求时,伺服器的回应(即回传的资料)可以通过 Response
对象来访问和解析。以下是如何解析 requests
回传的资料的不同方面:
状态码
在使用 requests
模组进行 HTTP 请求时,伺服器会返回不同的 HTTP 状态码,以表示请求的结果。以下是一些常见的 HTTP 状态码及其说明:
response = requests.get('https://example.com')status_code = response.status_code
这些状态码是根据 HTTP 标準定义的,代表了伺服器对 HTTP 请求的不同回应。在使用 requests
或其他 HTTP 客户端进行网络请求时,正确理解这些状态码对于处理不同的回应非常重要。
回应内容
文本内容:用于获取伺服器返回的文本内容,如 HTML 或纯文本。text_content = response.text
二进制内容:用于获取非文本(如图片或文件)的原始二进制数据。binary_content = response.content
JSON 数据:如果回应的内容是 JSON 格式,可以直接解析成 Python 的字典。json_data = response.json()
回应头部
回应头部包含了伺服器对于请求的元数据,如内容类型、伺服器信息等。headers = response.headers
编码
获取或设置编码,可以查看或手动设置回应的字符编码。encoding = response.encodingresponse.encoding = 'utf-8'
Cookies
获取回应中的 Cookies:cookies = response.cookies
重定向和历史
如果请求经过重定向,可以查看整个重定向的历史。history = response.history
通过以上方法,您可以根据需要从 requests
的回应中提取和处理各种数据。在实际的应用中,根据伺服器回应的特点和需求选择合适的解析方式非常重要。
注意事项
异常处理:使用requests
时应注意处理可能出现的异常,如 ConnectionError
、Timeout
等。资源管理:建议使用 with
语句管理回应对象,以确保释放网络资源。安全与合规性:在使用 requests
进行网路爬虫时,应尊重目标网站的 robots.txt
规则,并确保符合相关法律法规。requests
的功能强大且使用方便,是 Python 网路程式设计和网路爬虫的重要工具之一。
HTTPBin 线上服务
HTTPBin 是一个线上服务,用于测试 HTTP 请求和回应。它提供了一系列端点,每个端点都展示了特定类型的行为,使得开发者可以测试和理解 HTTP 协议的不同方面。HTTPBin 对于学习 HTTP 协议、调试和测试客户端(如网页浏览器和 HTTP 客户端库)非常有用。
主要特点
多样的测试端点:HTTPBin 提供了多种测试端点,包括用于测试 GET、POST、PUT、DELETE 请求的端点。支持自定义请求:你可以发送带有自定义头部、cookies 和数据的请求,HTTPBin 将返回一个描述这些请求的回应。查看返回信息:HTTPBin 返回的信息包括客户端 IP 地址、请求头部、请求数据、cookies 等,有助于理解 HTTP 请求和回应的结构。JSON 回应:HTTPBin 的大多数端点都返回 JSON 格式的数据,方便解析和处理。常用端点
/ip
:返回请求者的 IP 地址。/user-agent
:返回请求者的 User-Agent 信息。/headers
:返回请求的 HTTP 头部信息。/get
:返回 GET 请求数据。/post
:返回 POST 请求数据。/status/:code
:返回一个特定的 HTTP 状态码。/response-headers
:返回自定义的回应头部。/redirect/:n
:重定向到一个新的 URL,次数为 n
。/cookies
:返回请求中的 cookies。/delay/:n
:在回应之前等待 n
秒。应用场景
学习和教育:HTTPBin 是一个非常好的学习工具,用于教育和理解 HTTP 请求和回应。客户端测试:开发者可以使用 HTTPBin 来测试和调试 HTTP 客户端和库,验证它们是否按预期发送请求。API 交互实验:HTTPBin 可以用于实验性地构建和测试 API 交互,特别是对于理解不同 HTTP 方法和状态码的行为。总之,HTTPBin 是一个实用的工具,无论是对于学习 HTTP 协议的新手还是需要测试和调试 HTTP 请求的经验丰富的开发者。
範例: 抓取 Yahoo 股市网页资讯
使用浏览器,在网页上直接查看 原始码
透过 Python Requests
程式 抓取网页资讯
import requestsresponse = requests.get('https://tw.stock.yahoo.com/')print(response.text[0:1000]) # 印出前1000个字
结语
在开始使用 requests 模组之前,建议先对 HTTP 传输协定有一定的了解和认识。实际上,requests 模组是一个建立在 HTTP 协定之上的工具,它的主要功能是协助我们通过网络请求来获取资料,无论是 HTML 页面内容还是 JSON 格式的数据。因此,对 HTTP 协定的基本原理和操作有所熟悉,将有助于您更有效地使用 requests 模组,并能更好地理解网路请求和响应的过程。这包括了解不同的 HTTP 方法、状态码、请求头部以及如何处理响应数据等。掌握这些基础知识,将为您在网络程式开发领域的进一步学习和实践打下坚实的基础。
Python基础系列文章
分享所学贡献社会
[Python教学]开发工具介绍
[开发工具] Google Colab 介绍
[Python教学] 资料型态
[Python教学] if判断式
[Python教学] List 清单 和 Tuple元组
[Python教学] for 和 while 迴圈
[Python教学] Dictionary 字典 和 Set 集合
[Python教学] Function函示
[Python教学] Class 类别
[Python教学] 例外处理
[Python教学] 档案存取
[Python教学] 实作密码产生器
[Python教学] 日期时间
[Python教学] 套件管理
Python 爬虫系列文章
[Python爬虫] 网路爬虫
[Python爬虫] 分析目标网站
[Python爬虫] 发送请求与解析网站内容
最后最后有一件小小的请求,请大家帮我填写一下问卷,
让我们知道你想上怎么样课程,感激不尽。
问卷这边
Facebook 粉丝页 - TechMasters 工程师养成记
程式教育 - 工程师养成记
同步分享到部落格
[Python爬虫] 网路爬虫
[Python爬虫] 分析网站
[Python爬虫] Requests 模组