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

news2024/9/27 12:14:12

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 requests

response = 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 requests

response = 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 requests

proxies = {
    '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 requests

response = 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 BeautifulSoup

response = 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 csv

def 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 data
    else:
        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 证书验证、代理设置、文件上传与下载等内容。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

控件的拖拽移动及定时器及画家

定时器时时都在调用 virtual void timerEvent(QTimerEvent *event);//定时器更新函数 timer new QTimer(this);timer->start(1000);connect(timer,&QTimer::timeout,[this](){static int num 0;ui->led1->display(num);if(num10){timer->stop();}}); 画图事…

【杂谈】计算机世界的原理——二进制数和位运算以及各种进制数的表示方法

【杂谈】计算机世界的原理——二进制数和位运算以及各种进制数的表示方法 1.常见位运算符和常用操作2.各种进制数的表示方法 1.常见位运算符和常用操作 大家都知道,计算机中是使用二进制数储存数据的。在这一篇文章,我将会带领大家初步探索二进制数。在后…

8G 显存玩转书生大模型 Demo 进阶任务

使用 LMDeploy 完成 InternLM-XComposer2-VL-1.8B 的部署,并完成一次图文理解对话,记录复现过程并截图。 使用 LMDeploy 完成 InternVL2-2B 的部署,并完成一次图文理解对话,记录复现过程并截图。 总结:貌似没加上下文…

2024最新最全面的Selenium 3.0 + Python自动化测试框架

文档说明 Selenium是一个用于Web应用程序自动化测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。 Selenium测试的主要功能包括: 测试与浏览器的兼容性:测试应用程序是否能很好的工作在不同的浏览器和操作系统之上。…

聚焦汽车软件开发与测试:静态代码扫描、单元测试与集成测试等方面的实践应用

2024年7月18-19日,龙智携汽车软件开发及管理解决方案创新亮相2024 ATC汽车软件与安全技术周。龙智技术支持部负责人&Atlassian认证专家叶燕秀、龙智功能安全高级工程师景玉鑫在活动主会场联合发表了精彩演讲,分享推动汽车软件开发与功能安全的创新实…

【Deep-ML系列】Solve Linear Equations using Jacobi Method (雅可比迭代求解线性方程)

题目链接:Deep-ML 需要注意的是,np.diag 的返回值会根据输入参数的类型不同而有所不同: 输入为一维数组:np.diag 会返回一个以输入数组元素为对角线元素的对角矩阵。 输入为二维矩阵:np.diag 会返回输入矩阵的对角线元…

数组案例练习进阶版---对数组中的元素进行排序(选择法)

上期文章当中,我们一起了解了怎样查找数组中的元素,今天,再让我们来看一看怎样对数组中的元素进行排序吧。 再java中,关于数据的排序手段,多种多样,例如:选择法排序、冒泡法排序、快速排序等等…

Centos7.9操作系统kdump crash文件vmcore未生成问题

Centos7.9操作系统kdump crash文件未生成问题 一、背景说明1、问题背景 二、排查思路1、先了解下crashkernelcrashkernel设置方式示例如何配置crashkernel验证crashkernel配置 2、再了解下kdump2.1 Kdump 的基本概念2.1.1. 生产内核(Production Kernel)2…

WPF使用Direct2D绘制曲线

wpf使用Direct2D绘制曲线 Install-Package SharpDX Install-Package SharpDX.Direct2D1 Install-Package SharpDX.DXGI Install-Package SharpDX.Direct3D11 <Window x:Class="WpfApp2.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xam…

告别繁复,三款PDF转图片工具让一切变得简单

作为一名刚刚踏入职场的新手&#xff0c;各种电子文档真的是让我手忙脚乱&#xff0c;尤其是PDF文件&#xff0c;它以其格式稳定、兼容性好而被广泛使用。然而&#xff0c;有时候我们需要将PDF文件中的内容转换成图片格式&#xff0c;以便在不同的场合下使用。今天就和大家分享…

如何用IP地址去申请SSL证书?

在当今社会&#xff0c;网络安全越来越重要&#xff0c;网站部署SSL证书是保障网络安全的重要方面。在大多数情况下都是用域名来申请SSL证书&#xff0c;但是有时候没有域名&#xff0c;或者域名不能用来申请SSL证书时&#xff0c;就需要用IP地址来申请SSL证书。下面是具体申请…

Stable Diffusion绘画 | 图生图-局部重绘(一)

使用 文生图 生成如下图片&#xff0c; 正向提示词&#xff1a; (best quality, masterpiece:1.2),1girl,wearing school uniform,in the school playground, 反向提示词&#xff1a; NSFW,(EasyNegativeV2:1.2),worst quality,low quality,monochrome, 点击&#x1f3a8;按…

ThinkPHP6与金仓数据库(Kingbase)集成:模型查询的解决方案

摘要&#xff1a; ThinkPHP6是一款流行的PHP框架&#xff0c;支持多种数据库。然而&#xff0c;对于金仓数据库&#xff08;Kingbase&#xff09;这种相对小众的数据库系统&#xff0c;开发者在使用ThinkPHP6进行模型查询时可能会遇到一些兼容性问题。本文将提供一种解决方案&a…

08.JAVA线程基础

1.线程介绍 单线程&#xff1a;同一个时刻&#xff0c;只允许执行一个线程 多线程&#xff1a;同一个时刻&#xff0c;允许执行多个线程 并发&#xff1a;同一时刻&#xff0c;多个任务交替执行。 并行&#xff1a;同一时刻&#xff0c;多个任务同时执行。 2.线程使用 方式一&…

对称二叉树 - 力扣(LeetCode)C语言

101. 对称二叉树 - 力扣&#xff08;LeetCode&#xff09;(点击前面链接即可查看题目) 一、题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&…

【有手就行】:从无到有搭建前端VUE项目

前言 由于好久没正儿八经写过前端代码了&#xff0c;导致现在想自己创建个VUE项目搞点东西却连步骤都忘了。反正闲着也是闲着&#xff0c;就简单归纳下&#xff0c;就当整理下笔记吧。 直接开始吧 本次教程主要以VUE 2.x版本为介绍 第一步 环境准备 1.安装Node 从 Node官网…

战绩绿油油!全红婵巴黎奥运再度爆火,一个家庭兴旺的底层逻辑——早读(逆天打工人爬取热门微信文章解读)

上期点赞挺多呀&#xff0c;看来周六不上班的人真不少&#xff0c;羡慕呀&#xff01; 引言Python 代码第一篇 洞见 全红婵巴黎奥运再度爆火&#xff0c;我顿悟一个家庭兴旺的底层逻辑第二篇 股市 绿油油战纪结尾 引言 今天很晚 没办法 今天上班都差点迟到 有两点 一是早上开始…

CodeSys中处理(拼接)超长字符串

文章目录 1.需求2.目前的限制3.解决方案4.注意事项4.1.更改字符串的长度后还是被限制在32767或者32768 1.需求 目前有个需求&#xff1a;在CodeSys中&#xff0c;需要将上万甚至十几万条数据&#xff08;字符串&#xff09;汇总到一个字符串上。 2.目前的限制 我们知道默认使…

8–9月,​Sui Move智能合约工作坊将在台北举行

你对区块链和去中心化应用感兴趣吗&#xff1f;想深入学习Sui Move编程语言吗&#xff1f; 从8月10日到9月28日&#xff0c;Sui Mover社区将在每周六下午13:00–17:00举办精彩的工作坊&#xff0c;为期两个月&#xff0c;带你从零基础入门到高级进阶&#xff0c;全面掌握Sui M…

Gateway网关设置请求头乱码

问题描述&#xff1a; ​ 在做gateway用户认证过程中&#xff0c;我们将前端传过来的token字符串进行解析以后&#xff0c;将用户信息存入请求头往下传递的过程中&#xff0c;如果用户信息中存在中文&#xff0c;下游服务从请求头中获取到用户信息时会出现乱码 ​ 总体来说&a…