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 requests
    
    url = '<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 requests
    
    url = '<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 requests
    
    url = '<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 requests

url = '<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 requests

url = '<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 requests

url = '<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 requests

url = '<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, Timeout

url = '<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 requests

response = 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 来管理会话状态,以及如何处理重定向和使用代理。

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/559243.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【汇编语言】初识汇编

【汇编语言】初识汇编 文章目录 【汇编语言】初识汇编前言由机器语言到汇编语言机器语言与机器指令汇编语言与汇编指令汇编语言程序示例 计算机组成指令和数据的表示计算机的存储单元计算机的总线 内存读写与地址空间CPU对存储器的读写内存地址空间 总结 前言 为什么要学习汇编…

Numpy重修系列(一) --- 初识Numpy

一、为什么使用Numpy&#xff1f; 1.1、简介 Python科学计算基础包&#xff0c;提供 多维数组对象 、派生对象&#xff08;掩码数组、矩阵&#xff09; 数组的快速操作&#xff08;数学计算、逻辑、形状变化、排序、选择、输入输出、离散傅里叶变换、基本线性代数、基本统计运…

数据分析案例-中国黄金股票市场的EDA与价格预测

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【数据结构】单链表经典算法题的巧妙解题思路

目录 题目 1.移除链表元素 2.反转链表 3.链表的中间节点 4.合并两个有序链表 5.环形链表的约瑟夫问题 解析 题目1&#xff1a;创建新链表 题目2&#xff1a;巧用三个指针 题目3&#xff1a;快慢指针 题目4&#xff1a;哨兵位节点 题目5&#xff1a;环形链表 介绍完了…

Activity——spring方式创建activiti所需数据表结构

文章目录 前言依赖引入编写数据库连接等配置配置日志文件编写java代码生成数据库表结构问题反馈与解决思路问题一&#xff1a;Cause: java.sql.SQLSyntaxErrorException: Table activiti_02.act_ge_property doesnt exist 为什么文件名必须写死&#xff1f; 前言 在之前创建ac…

循序渐进丨使用 Python 向 MogDB 数据库批量操作数据的方法

当我们有时候需要向数据库里批量插入数据&#xff0c;或者批量导出数据时&#xff0c;除了使用传统的gsql copy命令&#xff0c;也可以通过Python的驱动psycopg2进行批量操作。本文介绍了使用psycopg2里的executemany、copy_from、copy_to、copy_expert等方式来批量操作 MogDB …

js-pytorch:开启前端+AI新世界

嗨&#xff0c; 大家好&#xff0c; 我是 徐小夕。最近在 github 上发现一款非常有意思的框架—— js-pytorch。它可以让前端轻松使用 javascript 来运行深度学习框架。作为一名资深前端技术玩家&#xff0c; 今天就和大家分享一下这款框架。 往期精彩 Nocode/Doc&#xff0c;可…

python爬虫之爬取携程景点评价(5)

一、景点部分评价爬取 【携程攻略】携程旅游攻略,自助游,自驾游,出游,自由行攻略指南 (ctrip.com) import requests from bs4 import BeautifulSoupif __name__ __main__:url https://m.ctrip.com/webapp/you/commentWeb/commentList?seo0&businessId22176&busines…

“中医显示器”是人体健康监测器

随着科技的进步&#xff0c;现代医学设备已经深入到了人们的日常生活中。然而&#xff0c;在这个过程中&#xff0c;我们不应忘记我们的医学根源&#xff0c;中医。我们将中医的望、闻、问、切四诊与现代科技相结合&#xff0c;通过一系列的传感器和算法将人体的生理状态以数字…

3、MYSQL-一条sql如何在MYSQL中执行的

MySQL的内部组件结构 大体来说&#xff0c;MySQL 可以分为 Server 层和存储引擎层两部分。 Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖 MySQL 的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函…

[Algorithm][滑动窗口][无重复字符的最长字串][最大连续的一个数 Ⅲ][将x减到0的最小操作数]详细讲解

目录 1.无重复字符的最长字串1.题目链接2.算法原理详解3.代码实现 2.最大连续的一个数 Ⅲ1.题目链接2.算法原理详解3.代码实现 3.将x减到0的最小操作数1.题目链接2.算法原理详解3.代码实现 1.无重复字符的最长字串 1.题目链接 无重复字符的最长字串 2.算法原理详解 研究的对…

算法打卡day39

今日任务&#xff1a; 1&#xff09;卡码网57. 爬楼梯&#xff08;70. 爬楼梯进阶版&#xff09; 2&#xff09;322.零钱兑换 3&#xff09;279.完全平方数 4&#xff09;复习day14 卡码网57. 爬楼梯&#xff08;70. 爬楼梯进阶版&#xff09; 题目链接&#xff1a;57. 爬楼梯…

数据结构从入门到实战——顺序表的应用

目录 一、基于动态顺序表实现通讯录 二、代码实现 2.1 通讯录的初始化 2.2 通讯录的销毁 2.3 通讯录的展示 2.4 通讯录添加联系人信息 2.5 通讯录删除联系人信息 2.6 通讯录修改联系人信息 2.7 通讯录的查找联系人信息 2.8 将通讯录中联系人信息保存到文件中 2.9…

乡政府管理系统|基于Springboot的乡政府管理系统设计与实现(源码+数据库+文档)

乡政府管理系统目录 目录 基于Springboot的乡政府管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、活动信息管理 3、新闻类型管理 4、新闻动态管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推…

考研党们,搭子们,打打鸡血!刷视频免疫了,时间竟然多了起来!——早读(逆天打工人爬取热门微信文章解读)

断舍离&#xff0c;断的是过去 引言Python 代码第一篇 人民日报 一个班级&#xff0c;29人全部“上岸”&#xff01; 第二篇 人民日报 来了&#xff01;新闻早班车要闻社会政策 结尾 时间就像河流 它带来一切 也带走一切 不打游戏不刷视频 时间的河流便能带来更丰富的体验 引言…

PSO-GPR单变量时序预测-递归预测未来数据 基于粒子群算法-高斯过程回归递归预测未来数据

文章目录 效果一览文章概述订阅专栏只能获取一份代码部分源码参考资料效果一览 文章概述 PSO-GPR单变量时序预测-递归预测未来数据 基于粒子群算法-高斯过程回归递归预测未来数据 订阅专栏只能获取一份代码 部分源码 %

Java对象克隆-浅拷贝与深拷贝

目录 1、对象的克隆 1.1 对象的浅拷贝 1.2 对象深拷贝 1、对象的克隆 1.1 对象的浅拷贝 在实际编程过程中&#xff0c;我们常常要遇到这种情况&#xff1a;有一个对象A&#xff0c;在某一时刻A中已经包含了一些有效值&#xff0c;此时可能会需要一个和A完全相同新对象B&am…

PyQt程序:实现新版本的自动更新检测及下载(FTP服务器实现)

一、实现逻辑 本实例采用相对简单的逻辑实现,用户在客户端使用软件时点击“检测升级”按钮,连接至FTP服务器检索是否有新版本的.exe,如果有,下载最新的.exe安装升级。 本实例服务端待下载.exe所在目录结构 本实例客户端待更新.exe所在目录结构 二、搭建服务器 可以参考…

springcloud第4季 springcloud-alibaba之sentinel

一 sentinel介绍 1.1 sentinel作用 sentinel是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障服务的稳定性。 1.2 组成部分 sen…

学习Rust的第11天:模块系统

Today we are taking a look at the module system of rust. We can use this to manage growing projects and keep track of what modules is stored where… 今天我们来看看Rust的模块系统。我们可以使用它来管理不断增长的项目&#xff0c;并跟踪 modules 存储在何处。 Rus…
最新文章