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

前言

  • 欢迎来到“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 证书验证、代理设置、文件上传与下载等内容。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blues_C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值