[Python爬虫] Requests 模组

Requests模组

http://img2.58codes.com/2024/20072651e2ZyvLkZze.png

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)

http://img2.58codes.com/2024/20072651qntx2A3cL3.png

POST 请求:提交表单

参数包含在请求主体中:POST 请求将数据作为请求 主体发送 。这意味着参数不会出现在 URL 中。数据隐私性更好:由于数据不在 URL 中显示,因此 POST 方法 适合传输敏感或私密数据 。无长度限制:POST 请求 没有数据长度限制 ,适用于大量数据的传输。适用于数据提交:POST 常用于向伺服器提交表单数据或上传文件。使用场景:用于提交表单、上传文件、进行交易等,可能会改变服务器状态或数据。
payload = {'key1': 'value1', 'key2': 'value2'}response = requests.post('https://httpbin.org/post', data=payload)print(response.text)

http://img2.58codes.com/2024/20072651XTetjXHgMB.png

常用方法

方法说明範例GET向指定的资源发送一个 HTTP GET 请求,用于请求数据。requests.get('https://httpbin.org', params={'key': 'value'})POST向指定资源提交数据进行处理请求。通常用于提交表单。requests.post('https://httpbin.org', data={'key': 'value'})PUT向指定资源位置上传其最新内容。requests.put('https://httpbin.org', data={'key': 'value'})DELETE请求伺服器删除指定的资源。requests.delete('https://httpbin.org')PATCH对资源进行部分修改。requests.patch('https://httpbin.org', data={'key': 'value'})

使用头部:

requests 模组中,HTTP 请求的头部(Headers)是关键的组成部分,用于在发送请求时向伺服器提供额外的上下文信息。头部是由一系列的键值对构成的,它们定义了请求的许多重要属性,如内容类型、用户代理、认证信息等。

头部的主要作用

用户代理(User-Agent):标识发出请求的客户端软件,常用于伺服器识别请求来源。内容类型(Content-Type):指定发送数据的格式,如 application/jsonapplication/x-www-form-urlencoded。接受(Accept):指定客户端能够接收的回应内容类型。认证(Authorization):包含用于认证的凭证,如基本认证的用户名和密码,或者是令牌。缓存控制(Cache-Control):指示缓存行为,如 no-cachemax-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 头部时。

常见头部设定

参数说明範例User-Agent标识发出请求的客户端类型。'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'Accept指定客户端能够接收的内容类型。'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8'Content-Type发送数据到伺服器时的内容类型。'Content-Type': 'application/json'Authorization用于认证的凭据,如基本认证或令牌。'Authorization': 'Bearer YOUR_TOKEN'Accept-Encoding标识客户端支持的内容编码类型。'Accept-Encoding': 'gzip, deflate, br'Connection控制是否保持网络连接的活跃。'Connection': 'keep-alive'Host指定发送请求的目标伺服器。'Host': 'example.com'Referer指示请求的原始资源的地址。'Referer': 'https://www.example.com'Cookie从客户端传送到伺服器的 Cookie。'Cookie': 'name=value; name2=value2'

处理回应:

当使用 requests 模组进行 HTTP 请求时,伺服器的回应(即回传的资料)可以通过 Response 对象来访问和解析。以下是如何解析 requests 回传的资料的不同方面:

状态码

在使用 requests 模组进行 HTTP 请求时,伺服器会返回不同的 HTTP 状态码,以表示请求的结果。以下是一些常见的 HTTP 状态码及其说明:

response = requests.get('https://example.com')status_code = response.status_code
代码说明200OK - 请求成功处理。201Created - 请求成功并创建了新的资源。202Accepted - 请求已被接受进行处理,但处理尚未完成。204No Content - 请求成功,但没有新的内容返回。301Moved Permanently - 请求的资源已永久移动到新位置。302Found - 请求的资源临时从不同的 URI 回应。400Bad Request - 伺服器无法或不会处理请求(客户端错误)。401Unauthorized - 认证失败或未提供认证。403Forbidden - 伺服器拒绝请求。404Not Found - 找不到请求的资源。405Method Not Allowed - 不允许使用请求中指定的方法。500Internal Server Error - 伺服器遇到了不知道如何处理的情况。502Bad Gateway - 获取请求的伺服器,从上游伺服器收到无效回应。503Service Unavailable - 伺服器目前无法使用(超载或停机维护)。504Gateway Timeout - 未能及时从上游伺服器或辅助伺服器收到请求。

这些状态码是根据 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 时应注意处理可能出现的异常,如 ConnectionErrorTimeout 等。资源管理:建议使用 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 股市网页资讯

使用浏览器,在网页上直接查看 原始码

http://img2.58codes.com/2024/20072651gJtp5zjFrC.png

http://img2.58codes.com/2024/20072651iCbTmXvOGG.png

透过 Python Requests 程式 抓取网页资讯

import requestsresponse = requests.get('https://tw.stock.yahoo.com/')print(response.text[0:1000]) # 印出前1000个字

http://img2.58codes.com/2024/20072651M805TVtQQh.png

结语

在开始使用 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 模组


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章