python爬虫-----深入了解 requests 库(第二十五天)

2024-04-19 22:04

本文主要是介绍python爬虫-----深入了解 requests 库(第二十五天),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏:python爬虫学习🎈🎈
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 

 

 

目录

一、发送请求

二、处理响应

三、请求头和响应头

四、状态码和异常处理

五、cookie

六、会话管理

七、重定向和代理


在学习 Python 爬虫的第二十五天,你将进一步深入了解 requests 库,这是一个在爬虫开发中非常重要的工具。requests 库提供了简单而强大的接口,使得发送 HTTP 请求和处理响应变得十分容易。在这一阶段,我们会学习到如何更有效地使用 requests 库,处理复杂的请求和响应,以及处理各种网络情况下的异常。

我总结了十四个知识点,今天我们先来看前七个。

一、发送请求

发送请求是使用 requests 库中的 getpost 方法来实现的。这两种方法分别用于发送 GET 和 POST 请求。下面是它们的基本用法:

  1. 发送 GET 请求 使用 requests.get 方法可以发送一个 GET 请求到指定的 URL。示例代码如下:

    import reques
    url = '<http://example.com/api>'
    response = requests.get(url)print(response.text)

    在这个例子中,我们向 http://example.com/api 发送了一个 GET 请求,并将响应的内容打印出来。

  2. 发送带参数的 GET 请求 如果需要在 URL 中传递参数,可以将参数作为一个字典传递给 params 参数。示例代码如下:

    
    import requestsurl = '<http://example.com/api>'
    params = {'key1': 'value1', 'key2': 'value2'}
    response = requests.get(url, params=params)print(response.text)

    这里我们传递了一个字典作为参数,并在 URL 中生成了类似 http://example.com/api?key1=value1&key2=value2 的 URL。

  3. 发送 POST 请求 使用 requests.post 方法可以发送一个 POST 请求到指定的 URL。示例代码如下:

    
    import requestsurl = '<http://example.com/api>'
    data = {'key1': 'value1', 'key2': 'value2'}
    response = requests.post(url, data=data)print(response.text)

    在这个例子中,我们向 http://example.com/api 发送了一个 POST 请求,并将响应的内容打印出来。

  4. 发送带 JSON 数据的 POST 请求 如果需要发送 JSON 数据,可以使用 json 参数。示例代码如下:

    
    import requestsurl = '<http://example.com/api>'
    data = {'key1': 'value1', 'key2': 'value2'}
    response = requests.post(url, json=data)print(response.text)

    这里我们使用 json=data 将字典数据转换为 JSON 格式,并发送到服务器。

以上是使用 requests 库发送 GET 和 POST 请求的基本用法。根据具体的需求,可以通过设置更多的参数来定制请求,如请求头、超时时间等。

二、处理响应

处理 requests 库发送请求后的响应是非常重要的,可以通过响应对象获取到许多有用的信息。以下是一些常见的处理响应的方法和属性:

  1. 获取响应内容
    • response.text:以文本形式获取响应内容。
    • response.content:以字节形式获取响应内容。
    • response.json():将响应内容解析为 JSON 格式。
  2. 获取响应状态码
    • response.status_code:获取响应的 HTTP 状态码。
  3. 获取响应头信息
    • response.headers:获取响应头的字典形式。
  4. 处理异常
    • response.raise_for_status():如果响应状态码不是 200,会抛出一个 HTTPError 异常。
  5. 获取请求信息
    • response.request.url:获取请求的 URL。
    • response.request.headers:获取请求的头信息。
  6. 其他
    • response.elapsed:获取请求响应时间。
    • response.history:获取重定向历史。

下面是一个示例,演示了如何发送请求并处理响应:


import requestsurl = '<http://example.com/api>'
response = requests.get(url)# 获取响应内容
print(response.text)# 获取响应状态码
print(response.status_code)# 获取响应头信息
print(response.headers)# 检查是否有异常
response.raise_for_status()# 获取请求的 URL 和头信息
print(response.request.url)
print(response.request.headers)

通过这些方法和属性,我们可以更好地处理 requests 库发送请求后的响应,从而更有效地编写爬虫程序。

三、请求头和响应头

在使用 requests 库发送请求和处理响应时,请求头和响应头都是非常重要的信息。请求头包含了发送请求的一些元数据,如用户代理、接受的内容类型等。而响应头包含了服务器返回的一些元数据,如内容类型、服务器信息等。以下是如何使用 requests 库获取请求头和响应头的示例:

  1. 获取请求头信息

import requestsurl = '<http://example.com/api>'
headers = {'User-Agent': 'My User Agent','Accept': 'application/json'
}
response = requests.get(url, headers=headers)# 获取请求头信息
request_headers = response.request.headers
print("请求头信息:")
for key, value in request_headers.items():print(f"{key}: {value}")
  1. 获取响应头信息

import requestsurl = '<http://example.com/api>'
response = requests.get(url)# 获取响应头信息
response_headers = response.headers
print("响应头信息:")
for key, value in response_headers.items():print(f"{key}: {value}")

通过这些方法,我们可以获取到请求头和响应头的详细信息,有助于了解请求和响应的具体情况,并在需要时进行调试和分析。

四、状态码和异常处理

在使用 requests 库发送网络请求时,了解状态码和异常处理是非常重要的。状态码表示服务器对请求的处理结果,常见的状态码有:

  • 200:请求成功。
  • 404:请求的资源未找到。
  • 500:服务器内部错误。

异常处理可以帮助我们处理在发送请求时可能出现的各种异常情况,如网络连接问题、超时等。以下是如何获取状态码和处理异常的示例:

  1. 获取状态码

import requestsurl = '<http://example.com/api>'
response = requests.get(url)# 获取响应状态码
status_code = response.status_code
print(f"响应状态码:{status_code}")if status_code == 200:print("请求成功")
elif status_code == 404:print("请求的资源未找到")
elif status_code == 500:print("服务器内部错误")
# 其他状态码的处理...
  1. 异常处理

import requests
from requests.exceptions import HTTPError, ConnectionError, Timeouturl = '<http://example.com/api>'
try:response = requests.get(url)response.raise_for_status()  # 检查响应状态码
except HTTPError as http_err:print(f'HTTP error occurred: {http_err}')
except ConnectionError as conn_err:print(f'Connection error occurred: {conn_err}')
except Timeout as timeout_err:print(f'Request timed out: {timeout_err}')
except Exception as err:print(f'Other error occurred: {err}')

通过这些方法,我们可以获取到状态码并根据不同的状态码或异常类型进行相应的处理,确保你的程序在遇到异常情况时能够做出正确的响应。

五、cookie

在网络通信中,Cookie 是服务器发送到浏览器并保存在本地的一小段数据,用于跟踪用户的会话信息、存储用户偏好等。在使用 requests 库发送请求时,可以使用 Cookies 来维持会话状态或者传递身份验证信息。以下是如何在 requests 中使用 Cookies 的示例:

  1. 发送带有 Cookies 的请求

import requests# 定义要发送的 Cookies
cookies = {'cookie1': 'value1', 'cookie2': 'value2'}# 发送带有 Cookies 的请求
response = requests.get('<http://example.com/api>', cookies=cookies)# 处理响应
print(response.text)
  1. 获取响应中的 Cookies

import requestsresponse = requests.get('<http://example.com/api>')# 获取响应中的 Cookies
response_cookies = response.cookies
for cookie in response_cookies:print(f"Cookie Name: {cookie.name}, Value: {cookie.value}")

通过这些方法,我们可以在 requests 中使用 Cookies 来发送请求和处理响应,实现对会话状态的维持和管理。

六、会话管理

在使用 requests 库发送多个相关请求时,为了保持会话状态(如保持登录状态、传递身份验证信息等),可以使用会话对象 requests.Session()。会话对象可以在多个请求之间保持会话状态,并且可以使用同一个会话对象发送多个请求,从而避免重复设置相同的参数。以下是如何使用会话对象管理会话状态的示例:

(1)创建会话对象


import requests# 创建会话对象
session = requests.Session()

(2)发送请求


# 使用会话对象发送请求
response1 = session.get('<http://example.com/login>', params={'username': 'user', 'password': 'pass'})
response2 = session.get('<http://example.com/profile>')

(3)处理响应


# 处理响应
print(response1.text)
print(response2.text)

通过这种方式,我们可以使用同一个会话对象发送多个请求,会话对象会自动处理 Cookies,并且保持会话状态,从而实现对会话状态的管理。

七、重定向和代理

在使用 requests 库发送网络请求时,可能会遇到重定向和代理的情况。重定向是指服务器返回一个重定向响应,告诉客户端应该重定向到另一个 URL。代理是指通过代理服务器发送请求,使得请求看起来像是从代理服务器发出的,而不是直接从客户端发出的。以下是如何处理重定向和使用代理的示例:

  1. 重定向处理

import requests# 发送请求,allow_redirects 参数控制是否允许重定向,默认为 True
response = requests.get('<http://example.com>', allow_redirects=True)# 获取重定向历史
for redirect in response.history:print(f"Redirected to: {redirect.url}")# 获取最终响应的 URL 和内容
print(f"Final URL: {response.url}")
print(response.text)
  1. 使用代理

import requests# 设置代理服务器
proxies = {'http': '<http://proxy.example.com>','https': '<https://proxy.example.com>'
}# 发送请求时指定代理
response = requests.get('<http://example.com>', proxies=proxies)# 处理响应
print(response.text)

通过这些方法,我们可以处理重定向并使用代理发送请求,从而实现更灵活的请求发送和响应处理。

在第二十五天的学习中,我们深入探讨了 Python 网络爬虫的关键概念和技术。我们学习了如何发送请求并处理响应,了解了请求头和响应头的重要性,以及如何处理不同的状态码和异常情况。我们还学习了如何使用 Cookie 来管理会话状态,以及如何处理重定向和使用代理。

这些知识对于编写高效、稳定的网络爬虫至关重要。通过不断练习和探索,我们可以不断提升自己的爬虫技能,从而更好地应对各种复杂的网络数据抓取任务。

在接下来的学习中,我们将继续深入探讨网络爬虫的更多高级主题,为构建强大的爬虫系统打下坚实的基础。让我们继续努力学习,探索更多有趣的内容!

好啦,今天的学习就到这里了。小伙伴们,拜拜啦!

这篇关于python爬虫-----深入了解 requests 库(第二十五天)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918554

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid