当前位置: 首页 > news >正文

Python 爬虫入门(七):requests 库的使用「详细介绍」

Python 爬虫入门(七):requests 库的使用「详细介绍」

  • 前言
  • 1. 初识 requests
    • 1.1 安装 requests 库
    • 1.2 发送 GET 请求
    • 1.3 发送 POST 请求
  • 2. HTTP 请求详解
    • 2.1 请求方法
    • 2.2 请求头
    • 2.3 请求参数
  • 3. 处理响应
    • 3.1 响应内容
    • 3.2 响应状态码
    • 3.3 响应头
  • 4. 会话保持
  • 5. SSL 证书验证
  • 6. 使用代理
  • 7. 文件上传与下载
    • 7.1 文件上传
    • 7.2 文件下载
  • 8. 处理复杂的网页
  • 9. 实战项目:抓取数据
    • 9.1 项目需求
    • 9.2 项目步骤
    • 9.3 示例代码
    • 总结

前言

  • 欢迎来到“Python 爬虫入门”系列的第七篇文章。本篇文章将详细介绍如何使用 requests 库进行网络请求,包括发送各种类型的 HTTP 请求、处理响应、会话保持、SSL 证书验证、代理设置、文件上传与下载等内容。

  • 在本篇文章的代码示例中,我将使用https://jsonplaceholder.typicode.com 网站的数据,这是一个提供假数据的免费 REST API 服务的网站。这个服务由 JSON Server 和 LowDB 支持,每月提供约30亿次请求。它被称为 “JSONPlaceholder”,常用于测试和原型设计。

  • requests 库是 Python 中最流行的 HTTP 库之一,因其简单易用和功能强大而广受欢迎。如果你是一个爬虫开发新手,本篇文章将帮助你全面掌握 requests库的用法,从而提升你的爬虫开发技能。

1. 初识 requests

1.1 安装 requests 库

首先,确保你已经安装了 requests 库。如果没有安装,可以使用以下命令安装:

pip install requests

1.2 发送 GET 请求

我们先从最基本的 GET 请求开始。

import requests# 发送 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts')
print(response.status_code)  # 输出状态码
print(response.json())  # 输出响应内容

上面的代码向 https://jsonplaceholder.typicode.com/posts 发送了一个 GET 请求,并打印出响应的状态码和内容。
在这里插入图片描述

1.3 发送 POST 请求

接下来,我们来发送一个 POST 请求。

import requests# 发送 POST 请求
data = {'title': 'foo','body': 'bar','userId': 1
}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
print(response.status_code)  # 输出状态码
print(response.json())  # 输出响应内容

在这个例子中,我们向 https://jsonplaceholder.typicode.com/posts 发送了一个 POST 请求,并附带了一些数据。
在这里插入图片描述

2. HTTP 请求详解

2.1 请求方法

requests 库支持多种 HTTP 请求方法,包括 GET、POST、PUT、DELETE、HEAD、OPTIONS 等。

import requests# 发送 PUT 请求
data = {'id': 1,'title': 'foo','body': 'bar','userId': 1
}
response = requests.put('https://jsonplaceholder.typicode.com/posts/1', json=data)
print(response.status_code)  # 输出状态码
print(response.json())  # 输出响应内容

发送 PUT 请求执行结果如下:
在这里插入图片描述

import requests# 发送 DELETE 请求
response = requests.delete('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # 输出状态码

发送 DELETE 请求执行结果如下:
在这里插入图片描述

2.2 请求头

有时候我们需要在请求中添加一些头信息,例如 User-Agent、Content-Type 等。

import requests# 添加请求头
headers = {'User-Agent': 'Mozilla/5.0','Content-Type': 'application/json'
}
response = requests.get('https://jsonplaceholder.typicode.com/posts', headers=headers)
print(response.status_code)  # 输出状态码
print(response.json())  # 输出响应内容

2.3 请求参数

我们可以通过 URL 参数来传递数据。

import requests# 添加请求参数
params = {'userId': 1
}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
print(response.status_code)  # 输出状态码
print(response.json())  # 输出响应内容

执行结果如下:
在这里插入图片描述

3. 处理响应

3.1 响应内容

响应内容可以是 JSON、文本、二进制数据等。

import requestsresponse = requests.get('https://jsonplaceholder.typicode.com/posts/1')# 获取响应内容
print(response.text)  # 以字符串形式输出
print(response.json())  # 以 JSON 形式输出
print(response.content)  # 以二进制形式输出

执行结果如下:
在这里插入图片描述

3.2 响应状态码

我们可以通过响应对象的 status_code 属性来获取状态码。
在这里插入图片描述

3.3 响应头

响应头包含了很多有用的信息,例如服务器类型、内容类型等。

import requestsresponse = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)

执行结果如下:
在这里插入图片描述

4. 会话保持

使用 requests 库的会话对象可以在多个请求之间保持某些参数。

import requests# 创建会话对象
session = requests.Session()# 设置会话级别的请求头
session.headers.update({'User-Agent': 'Mozilla/5.0'})# 发送请求
response = session.get('https://jsonplaceholder.typicode.com/posts')
print(response.status_code)
print(response.json())

5. SSL 证书验证

requests 库默认会验证 SSL 证书。你可以通过 verify 参数来控制这一行为。

import requests# 禁用 SSL 证书验证
response = requests.get('https://jsonplaceholder.typicode.com/posts', verify=False)
print(response.status_code)

执行结果如下:
在这里插入图片描述

6. 使用代理

在爬虫开发中,使用代理可以帮助我们隐藏真实的 IP 地址。

import requestsproxies = {'http': 'http://10.10.10.10:8000','https': 'http://10.10.10.10:8000'
}response = requests.get('https://jsonplaceholder.typicode.com/posts', proxies=proxies)
print(response.status_code)

7. 文件上传与下载

7.1 文件上传

我们可以使用 requests 库轻松地上传文件。

import requests# 文件上传
files = {'file': open('example.txt', 'rb')}
response = requests.post('https://jsonplaceholder.typicode.com/posts', files=files)
print(response.status_code)
print(response.json())

7.2 文件下载

同样地,我们也可以下载文件。

import requestsresponse = requests.get('https://jsonplaceholder.typicode.com/photos/1', stream=True)
with open('photo.jpg', 'wb') as file:for chunk in response.iter_content(chunk_size=128):file.write(chunk)
print('文件下载完成')

8. 处理复杂的网页

对于一些复杂的网页,我们可能需要处理 JavaScript 动态加载的内容。这时可以结合 requestsBeautifulSoup 库来实现。

import requests
from bs4 import BeautifulSoupresponse = requests.get('https://jsonplaceholder.typicode.com/')
soup = BeautifulSoup(response.text, 'html.parser')# 提取标题
titles = soup.find_all('title')
for title in titles:print(title.text)

执行结果如下:
在这里插入图片描述

9. 实战项目:抓取数据

接下来,我们将结合前面所学的内容,编写一个完整的爬虫项目,从网站中抓取数据并保存到 CSV 文件中。

9.1 项目需求

  1. https://jsonplaceholder.typicode.com/posts 提取标题和链接。
  2. 将数据保存到 CSV 文件中。

9.2 项目步骤

  1. 发送请求并获取响应。
  2. 解析响应内容。
  3. 保存数据到 CSV 文件。

9.3 示例代码

import requests
import csvdef fetch(url):response = requests.get(url)if response.status_code == 200:data = []posts = response.json()for post in posts:title = post['title']link = f"https://jsonplaceholder.typicode.com/posts/{post['id']}"data.append([title, link])return dataelse:print('请求失败,状态码:', response.status_code)return []def save_to_csv(data, filename):with open(filename, 'w', newline='', encoding='utf-8') as file:writer = csv.writer(file)writer.writerow(['Title', 'Link'])writer.writerows(data)if __name__ == '__main__':url = 'https://jsonplaceholder.typicode.com/posts'data = fetch(url)if data:save_to_csv(data, 'datas.csv')print('数据已保存到 datas.csv')

总结

通过本篇文章的学习,相信小伙伴们已经掌握了 requests 库的基本用法,涵盖了发送各种请求、处理响应、会话保持、SSL 证书验证、代理设置、文件上传与下载等内容。

相关文章:

Python 爬虫入门(七):requests 库的使用「详细介绍」

Python 爬虫入门(七):requests 库的使用「详细介绍」 前言1. 初识 requests1.1 安装 requests 库1.2 发送 GET 请求1.3 发送 POST 请求 2. HTTP 请求详解2.1 请求方法2.2 请求头2.3 请求参数 3. 处理响应3.1 响应内容3.2 响应状态码3.3 响应头…...

两端约束的最优控制问题及其数值解法

问题的基本形式 设 n n n维系统状态房产 x ˙ ( t ) f [ x ( t ) , u ( t ) , t ] \dot{x}(t)f[x(t),u(t),t] x˙(t)f[x(t),u(t),t],控制向量 u ( t ) ∈ Ω u(t)\in\Omega u(t)∈Ω是分段连续函数, Ω ∈ R m \Omega\in R^m Ω∈Rm是有界闭集&#xf…...

电磁仿真--基本操作-CST-(6)-导线周围磁场

目录 1. 简介 2. 过程 2.1 新建工程 2.2 选择求解器 2.3 设置单位 2.4 设置频率 2.5 绘制导线 2.6 Background 2.7 边界条件 2.8 设置激励源 2.9 查看结果 3. 其他设置 3.1 网格类型 3.2 集总网络元件 3.3 阻抗和导纳矩阵 3.4 自适应网格细化 3.4 提升计算效率…...

用Java手写jvm之模拟方法调用指令invokexxx和方法返回指令xreturn

写在前面 源码 。 本文一起看下方法调用相关的指令invokexxx以及方法返回(栈帧弹出线程栈)相关的指令xReturn 。 1:正文 因为invokexxx指令和普通的指令不同,会创建一个新的栈帧,并压倒操作数栈中,所以我…...

自定义枚举类型检查

/*** 工单状态,使用字典:order_item_state*/ CheckEnum(nullAble true, enumType OrderItemStateEnum.class) private String workState; 注解类 package com.gdyunst.core.tool.validation;import javax.validation.Constraint; import javax.valid…...

探索四川财谷通抖音小店:安全与信赖的购物新体验

在数字经济蓬勃发展的今天,抖音平台凭借其庞大的用户基础和强大的内容生态,逐渐成为了电商领域的一股不可忽视的力量。其中,四川财谷通抖音小店作为这一浪潮中的佼佼者,不仅以其丰富的商品种类和独特的品牌魅力吸引了众多消费者的…...

systemd-manage系统服务图形化管理工具使用教程

1. systemd-manage介绍 systemd-manage是一个开源的基于systemd服务管理的图形化工具,使用qt图形库进行开发,可以提供服务管理,用户会话,配置文件修改,日志查询,性能分析,进程管理等功能。图形…...

移除元素(LeetCode)

题目 给你一个数组 和一个值 ,你需要 原地 移除所有数值等于 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 解…...

代码随想录27期|Python|Day38|509斐波那契|738.爬楼梯|746.746. 使用最小花费爬楼梯

贴一下动态规划的步骤(5步),就像是之前递归一样,需要每次落实到位。 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 ​​​​​509. 斐波那契 注意到n的范…...

windows docker容器部署前端项目

一、介绍 Docker 是一个开源的平台,旨在简化应用程序的开发、部署和运行。它通过使用容器(containers)来实现这一点。容器是一种轻量级、可移植的虚拟化方式,可以在不同的环境中一致地运行软件。 Docker 的主要作用和优点包括&a…...

科普文:微服务之全文检索ElasticSearch 集群的搭建

一、集群有什么用 1.1 群集的含义与产生 群集(或称为集群)是由多台主机构成,但对外,只表现为一个整体,只提供一个访问入口(域名或IP),相当于一台大型计算机。互联网应用中&#xf…...

QtObject是干什么的?

QtObject 是 Qt Quick 中的一个基类,用于创建非视觉对象。这意味着 QtObject 不渲染任何视觉内容,它主要用于定义数据和逻辑,而不是用户界面元素。你可以把 QtObject 看作是 QML 中的一个基础组件,用于创建和管理不需要显示的对象…...

锐捷RCNA | 远程登录与路由技术

锐捷RCNA | 远程登录与路由技术 一、远程登录配置1. Telnet远程登录介绍2. 案例1--设置远程登录密码实现远程登录3. 案例2--定义不同用户账户实现远程用户权限隔离4. SSH远程登录介绍5. 案例--通过SSH功能远程管理设备 二、路由技术1. 直连路由的数据通信2. 间接路由的数据通信…...

实现Vue-tiny-diff算法

前言 前面我们实现了基本的数据更新到视图渲染的逻辑,但是这种方式(innerHTML)是极其低效的, 因此,我们相应引入 dom 和 diff 算法, 数据到视图的过程变为: state -> vdom -> dom vNode 层 所谓 vNode, 就是一个表示 dom 结构的轻量对象 {tag, props, children; }为…...

正则表达式测试工具

前言 正则表达式测试工具可供您输入正则表达式和测试文本,立即查看匹配结果. 下面是离线的HTML文件,同样可以提供相同的服务. 目录 使用说明 HTML代码 正则表达式的编写经验和方法 总结 使用说明 1.先将HTML代码存储成.html为后缀的文件; 2.然后用浏览器打开这个…...

Github 2024-08-02 开源项目日报 Top9

根据Github Trendings的统计,今日(2024-08-02统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4Go项目1C项目1Rust项目1Shell项目1Dockerfile项目1TypeScript项目1Dart项目1Docker-OSX: 在Docker容器中运行Mac OS X 创建周期:152…...

重生之我 学习【数据结构之顺序表(SeqList)】

⭐⭐⭐ 新老博友们,感谢各位的阅读观看 期末考试&假期调整暂时的停更了两个多月 没有写博客为大家分享优质内容 还容各位博友多多的理解 美丽的八月重生之我归来 继续为大家分享内容 你我共同加油 一起努力 ⭐⭐⭐ 数据结构将以顺序表、链表、栈区、队列、二叉树…...

前端day4-表单标签

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>day4-表单</title> </head> <body&g…...

vue3-print-nb 表格打印分页,第一页有空白的情况出现解决方法(两种:一种原生,一种基于element表格)

第一种&#xff1a;基于element表格分页 <template><!-- element分组打印 --><div class"hello"><button v-print"printContent">打印</button><div id"printDiv"><p>工资统计表</p><p>…...

搜维尔科技:借助 Xsens中的远程人体录制功能,可以在任何位置以无限量同时捕捉无限数量演员的身体动作

借助 Xsens中的远程人体录制功能&#xff0c;可以在任何位置以无限量同时捕捉无限数量演员的身体动作 搜维尔科技&#xff1a;借助 Xsens中的远程人体录制功能&#xff0c;可以在任何位置以无限量同时捕捉无限数量演员的身体动作...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 &#x1f50d; 若用递归计算每一项&#xff0c;会发生什么&#xff1f; Horners Rule&#xff08;霍纳法则&#xff09; 第一步&#xff1a;我们从最原始的泰勒公式出发 第二步&#xff1a;从形式上重新观察展开式 &#x1f31f; 第三步&#xff1a;引出霍纳法则&…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...