python : Requests请求库入门使用指南 + 简单爬取豆瓣影评

Requests 是一个用于发送 HTTP 请求的简单易用的 Python 库。它能够处理多种 HTTP 请求方法,如 GET、POST、PUT、DELETE 等,并简化了 HTTP 请求流程。对于想要进行网络爬虫或 API 调用的开发者来说,Requests 是一个非常有用的工具。在今天的博客中,我将介绍 Requests 的基本用法,并提供一个合理的爬虫实例。

一.安装 Requests

在使用 Requests 库之前,您需要安装它。可以通过 pip 命令来安装:

python 复制代码
pip install requests

在国内安装的速度很慢,所以我们可以修改为国内镜像源安装比如说清华大学镜像源:

python 复制代码
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

你也可以选择其他镜像源,如阿里云、华为云等,替换 -i 参数后的 URL。

二.基本用法

Requests 提供了简单的接口来处理 HTTP 请求和响应。我们将从最基本的 GET 请求和 POST 请求开始。

1.GET 请求

GET 请求用于从服务器获取数据。可以通过 ' requests.get() ' 方法来实现。以下是一个简单的例子,通过get请求豆瓣影评:

python 复制代码
import requests

# 发送GET请求
response = requests.get('https://movie.douban.com/review/best/')

print(response.status_code)  # 输出状态码
print(response.text)         # 输出响应内容

当然由于豆瓣有简单的反爬虫设置,所以我们这样直接发送请求很容易就会被网站限制,不要轻易尝试。

2.POST 请求

POST 请求用于向服务器发送数据,通常用于提交表单或上传文件,可以通过 `requests.post()` 方法来实现。

python 复制代码
import requests

data = {'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
print(response.status_code)
print(response.json())  # 输出响应的 JSON 数据

三.处理响应

Requests 库提供了多种方法来处理 HTTP 响应:

response.text:以字符串形式获取响应内容。

response.json():以 JSON 格式解析响应内容。

response.content:以二进制形式获取响应内容。

response.status_code:获取 HTTP 状态码。

response.headers:获取响应头信息。

四.处理简单的反爬

添加请求头

通过设置请求头将requests库的请求伪装成浏览器请求:

python 复制代码
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
    'Referer': 'https://www.example.com',
    'Content-Type': 'application/json'
}
response = requests.get('https://api.example.com/data', headers=headers)

在许多情况下,自定义请求头是必需的。大多数网站至少都会有简单的爬虫检测,虽然这样只能应付最简单的反爬策略,但是也是最常用的伪装方法了。

五.爬虫实例

下面是一个简单的爬虫实例,使用 Requests 库从豆瓣网爬取影评的标题和简介:

python 复制代码
import re
import requests

# 定义要爬取的URL
url = 'https://movie.douban.com/review/best/'

# 设置请求头部,以模拟浏览器访问
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/127.0.0.0 Safari/537.36"
}

# 发送HTTP GET请求以获取网页内容
response = requests.get(url, headers=headers)

# 提取响应的HTML内容
con = response.text

# 初始化存储数据的容器
title_datas = []
synopsis_datas = []

# 使用正则表达式提取评论标题
titles = re.findall('<h2><a href="https://movie.douban.com/review/.*?">(.*?)</a></h2>', con)
for title in titles:
    title_datas.append(title)  # 将标题添加到标题列表中

# 使用正则表达式提取评论内容
datas = re.findall('''<div id=".*?" class=".*?" data-rid=".*?">
                    <div class="short-content">.*?
                        (.*?)\n
                        &nbsp;\(<a href="javascript:;" id=".*?" class="unfold" title="展开">展开</a>\)
                    </div>
                </div>''', con, re.S)

# 清理提取的评论内容
for data in datas:
    # 移除HTML标签
    clean_data = re.sub(r'<p .*?>.*?</p>', '', data)
    # 将多个空白字符替换为单个空格,并去除前后的空白
    clean_data = re.sub(r'\s+', ' ', clean_data).strip()
    synopsis_datas.append(clean_data)  # 将清理后的评论内容添加到列表中

# 将标题和评论内容配对存储到字典中
items = {}
for i in range(len(title_datas)):
    items[title_datas[i]] = synopsis_datas[i]

# 打印结果
print(items)

导入库

import re:用于处理正则表达式。

import requests:用于发送HTTP请求并获取网页内容。

定义URL和请求头

url:目标网页的地址。

headers:模拟浏览器请求的头部信息,防止被网站屏蔽。

发送请求并获取网页内容

requests.get(url, headers=headers):发送GET请求获取网页数据。

response.text:获取响应的HTML文本内容。

初始化数据存储容器

title_datas:存储提取的评论标题。

synopsis_datas:存储提取的评论内容。

提取评论标题

re.findall:使用正则表达式提取标题。

将标题添加到 title_datas 列表中。

提取评论内容

re.findall:使用正则表达式提取评论内容。

re.sub:移除HTML标签并清理多余空白。

配对标题和评论内容

使用 for 循环将标题和内容配对,并存储在 items 字典中。

打印结果

输出字典 items,显示标题和评论内容的配对结果。

当然这里的实例写的并不是很好,只能给大家提供一个参考,大家爬取数据还是要基于网页分析,编写代码。

六.结论

注意事项:

  1. 遵守 robots.txt :在爬取任何网站之前,检查其 robots.txt 文件,确保你的爬虫行为符合网站的爬虫协议。
  2. 频率控制 :不要过于频繁地访问目标网站,以免对服务器造成负担。可以通过 time.sleep() 控制请求频率。
  3. 异常处理:在编写爬虫时,考虑到网络请求可能会失败,建议添加异常处理机制来保证程序的健壮性。

Requests 是一个功能强大且易于使用的库,适用于各种 HTTP 请求操作。通过灵活设置请求头和使用不同的请求方法,我们可以轻松实现复杂的网络请求任务。使用 Requests 库进行网络请求和数据抓取是一个强大且简单的方式。掌握其基础用法后,可以更高效地进行 API 调用和网页数据抓取。

相关推荐
苹果酱0567几秒前
C语言 char 字符串 - C语言零基础入门教程
java·开发语言·spring boot·mysql·中间件
代码小鑫17 分钟前
A032-基于Spring Boot的健康医院门诊在线挂号系统
java·开发语言·spring boot·后端·spring·毕业设计
训山24 分钟前
4000字浅谈Java网络编程
java·开发语言·网络
API快乐传递者26 分钟前
除了网页标题,还能用爬虫抓取哪些信息?
开发语言·爬虫·python
豌豆花下猫34 分钟前
REST API 已经 25 岁了:它是如何形成的,将来可能会怎样?
后端·python·ai
hutaotaotao1 小时前
c语言用户不同命令调用不同函数实现
c语言·开发语言
huangjiazhi_1 小时前
QTcpSocket 服务端和客户端
开发语言·qt
ac-er88882 小时前
ThinkPHP中的MVC分层是什么
开发语言·php·mvc
shinelord明2 小时前
【再谈设计模式】建造者模式~对象构建的指挥家
开发语言·数据结构·设计模式
平头哥在等你2 小时前
Python中的正则表达式教程
python·正则表达式