Loading... <div class="tip inlineBlock warning simple"> 🤖 本博客内容使用 GPT-4 技术进行润色 </div> `requests` 是一个 Python 的第三方库,用于轻松发送 HTTP 请求,无需手动添加查询字符串到 URL,或者表单编码 POST 数据。它提供了一个简洁的 API 来发送各种 HTTP 请求,处理响应,以及处理 HTTP 连接的细节,对用户使用十分友好,欢迎参考 [Requests库官方文档](https://2.python-requests.org//zh_CN/latest/user/install.html) 进行学习。 使用 `requests` 库通常只需要几行代码,就可以完成从发送请求到处理响应的整个过程。例如,发送一个GET请求并打印响应内容的代码如下: ```python import requests response = requests.get("http://www.baidu.com") print(response.status_code) ``` `requests` 库的使用几乎涵盖了所有基本的 HTTP 请求操作,它的功能强大、使用简单,是 Python 中处理HTTP请求的首选库。你可以通过以下命令来安装 `requests` 库: ``` pip install requests ``` ## 一、Requests 库概览 `requests` 库提供了简洁的 HTTP 客户端接口,以下是其基本方法: - `requests.request()`:构建基础请求,是其他方法的基础。 - `requests.get()`:获取网页数据,对应 HTTP 的 GET 请求。 - `requests.head()`:获取头部信息,对应 HTTP 的 HEAD 请求。 - `requests.post()`:提交数据到服务器,对应 HTTP 的 POST 请求。 - `requests.put()`:上传数据替换服务器上的内容,对应 HTTP 的 PUT 请求。 - `requests.patch()`:部分修改服务器上的数据,对应 HTTP 的 PATCH 请求。 - `requests.delete()`:删除服务器上的指定资源,对应 HTTP 的 DELETE 请求。 ### 方法详解 ### `requests.request(method, url, **kwargs)` * `method`: 请求方式,对应 get/put/post 等7种 * `url`: 拟获取页面的 URL 链接 * `**kwargs`: 控制访问的参数,共13个 #### **kwargs: 可选参数控制 * `params`: 将字典或字节序列作为查询参数附加到 URL 上。 * `data`: 作为请求主体发送的字典、字节序列或文件对象。 * `json`: JSON 格式数据,作为请求主体发送。 * `headers`: 自定义 HTTP 头的字典。 * `cookies`: 字典或 CookieJar 对象,包含请求中的 cookie 信息。 * `auth`: 用于 HTTP 认证的元组。 * `files`: 用于多部分编码文件上传的字典。 * `timeout`: 请求超时时间,以秒为单位。 * `proxies`: 用于设置代理服务器的字典,可用于网络请求中间的代理服务。 * `allow_redirects`: 布尔值,默认为 True,控制是否允许 HTTP 重定向。 * `stream`: 布尔值,默认为 True,决定是否立即下载响应内容。 * `verify`: 布尔值,默认为 True,是否验证服务器的 SSL 证书。 * `cert`: 用于 SSL 认证的本地证书路径。 ### `requests.get(url, params=None, **kwargs)` * `url`: 目标页面的 URL 链接。 * `params`: 可选的 URL 查询参数,格式为字典或字节序列。 * `**kwargs`: 包含了12个控制访问参数的可选参数集。 ### `requests.head(url, **kwargs)` * `url`: 目标页面的 URL 链接。 * `**kwargs`: 包含了12个控制访问参数的可选参数集。 ### `requests.post(url, data=None, json=None, **kwargs)` * `url`: 目标页面的 URL 链接,用于提交更新。 * `data`: 作为请求主体的字典、字节序列或文件。 * `json`: JSON 格式的数据,作为请求主体。 * `**kwargs`: 包含了12个控制访问参数的可选参数集。 ### `requests.put(url, data=None, **kwargs)` * `url`: 目标页面的 URL 链接,用于提交更新。 * `data`: 作为请求主体的字典、字节序列或文件。 * `**kwargs`: 包含了12个控制访问参数的可选参数集。 ### `requests.patch(url, data=None, **kwargs)` * `url`: 目标页面的 URL 链接,用于提交部分更新。 * `data`: 作为请求主体的字典、字节序列或文件。 * `**kwargs`: 包含了12个控制访问参数的可选参数集。 ### `requests.delete(url, **kwargs)` * `url`: 目标页面的 URL 链接,用于请求删除操作。 * `**kwargs`: 包含了12个控制访问参数的可选参数集。 ## 二、理解 Response 对象 Response 对象包含服务器响应的全部信息,以及原始的请求信息。 ```python import requests response = requests.get("http://www.baidu.com") print(response.status_code) print(type(response)) print(response.headers) ``` 输出示例: ``` 200 <class 'requests.models.Response'> {...响应头信息...} ``` ### Response 属性 - `response.status_code`:HTTP 状态码。 - `response.text`:响应内容的字符串形式。 - `response.encoding`:从 HTTP 头部猜测的响应内容编码。 - `response.apparent_encoding`:从内容分析出的编码方式。 - `response.content`:响应内容的二进制形式。 ### 编码处理 - `response.encoding`:如果无 charset,则默认为 ISO-8859-1。 - `response.apparent_encoding`:备选编码方式,基于内容分析。 ### 异常处理 - `response.raise_for_status()`:非 200 状态码时抛出异常。 ## 三、常见异常 Requests库可能抛出的一些异常包括: - `requests.ConnectionError`:网络连接错误。 - `requests.HTTPError`:HTTP 请求错误。 - `requests.URLRequired`:URL 缺失。 - `requests.TooManyRedirects`:过多的重定向。 - `requests.ConnectTimeout`:连接超时。 - `requests.Timeout`:请求超时。 ## 四、网页爬取通用代码框架 ```python import requests def request(url): try: response = requests.get(url, timeout=100) response.raise_for_status() response.encoding = response.apparent_encoding return response.text except: return "访问异常" url = "http://www.baidu.com" print(request(url)) ``` ## 五、HTTP 协议基础 HTTP URL(统一资源定位符)是网络上定位和访问资源的基础,它指导我们如何通过 HTTP(超文本传输协议)与远端服务器上的资源进行交互。这种交互通过一系列的 HTTP 方法来实现,每种方法对应不同类型的操作和资源状态的变更。 ### HTTP 方法的细节 - `GET`:此方法用于请求访问服务器上的指定资源,它只应用于获取数据而不会影响资源的状态。 - `HEAD`:类似于 GET 方法,HEAD 请求用于获取资源的元信息,如响应头,但不返回实际的内容。这常用于检测资源的状态或更新。 - `POST`:POST 方法用于向服务器提交数据,这是一个创建新资源或通过表单提交数据进行交互的常用方法。 - `PUT`:此方法用于替换服务器上已存在的资源,或当资源不存在时创建一个新的资源。 - `PATCH`:与 PUT 类似,PATCH 方法专用于对现有资源进行部分修改,更新其部分字段而不是整个资源。 - `DELETE`:DELETE 请求用于请求服务器删除指定的资源,这是一个用于资源管理的直接方法。 ### PATCH 与 PUT 的对比 - `PATCH`:主要用于对资源进行部分更新,例如,如果你只需要更新用户资料中的邮箱地址而不是整个用户信息,使用 PATCH 是更高效的选择。它只发送修改的数据,从而节省带宽并减少网络负载。 - `PUT`:则是用于整体替换资源的方法。如果你需要更新资源的全部内容,比如上传一个新版本的文件或完全更新一个数据记录,那么 PUT 是恰当的选择。PUT 请求需要传输整个资源,即使只更改了部分内容。 在实现API时,合理选择适当的 HTTP 方法对于构建一个高效、可维护且遵循 HTTP 协议语义的 Web 服务至关重要。 ## 六、Robots 协议 Robots协议,是一种由网站管理员用来指导和控制搜索引擎爬虫行为的约定。通过在网站根目录下放置一个名为 `robots.txt` 的文本文件,管理员可以声明哪些页面是可以被爬取的,哪些是禁止访问的。这个简单但强大的协议使得网站能够更精细地管理和优化搜索引擎的索引过程。 以下是一些知名网站的 Robots 协议示例,通过这些链接,可以直接查看各自的`robots.txt`文件内容: - [百度Robots协议](http://www.baidu.com/robots.txt):这个链接指向中国最大的搜索引擎百度的 Robots 协议,通过这个文件,百度向其他爬虫说明了哪些内容是开放的,哪些是受限的。 - [新浪新闻Robots协议](http://news.sina.com.cn/robots.txt):作为新闻发布平台,新浪新闻通过其 Robots 协议文件,指示了爬虫哪些新闻内容是可以抓取的,哪些是不允许的。 网络爬虫开发者和操作者应当严格遵守 Robots 协议。不仅是出于对网站管理员意愿的尊重,更是因为忽视这些规则可能会引起服务器过载,影响用户体验,甚至触犯相关法律法规,导致法律责任。因此,一个负责任的爬虫设计者会在爬虫访问前先检查` robots.txt` 文件,并按照文件中的指示行动,这样既可以确保爬虫的活动不会对网站造成不利影响,也能保护爬虫运营者免受法律风险。 Last modification:March 1, 2024 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏