Python爬虫requests库使用教程:安装、GET/POST请求与响应处理

Luna
Luna
发布时间:2026-10-16 | 3人浏览过
原创

本文详细介绍Python爬虫中requests库的安装方法及GET与POST请求的具体使用。涵盖通过pip或源码安装requests,演示如何构造带参数的GET请求、获取JSON数据、处理二进制文件下载,以及利用data和files参数进行POST请求和文件上传。同时解析响应状态码、异常抛出及JSON转换技巧,帮助开发者高效完成HTTP交互。

requests库简介

requests是一个基于Python语言编写的HTTP请求模块,广泛用于网页爬取。它建立在urllib库之上,但操作更为简便,能够完全满足HTTP请求及URL资源处理的需求,是学习Python爬虫的理想选择。

requests库安装

若已安装anaconda,则默认包含requets 库(建议新手直接安装 anaconda,可避免繁琐配置)。若未安装,可通过以下两种方式完成安装。

1、pip命令安装

在具备pip环境的终端中,直接输入命令进行下载。

pip install requests

2、下载代码进行安装

当pip命令安装失败时,可通过下载第三方库文件进行手动安装。

github 上的官方地址为:https://github.com/requests/requests

将下载文件解压至Python安装目录。

打开解压后的文件夹,在此处运行命令行并输入:

python setup.py install

即可。

随后在交互式环境中输入以下代码测试requests模块是否安装正确:

import requests

若无报错,说明requests模块安装成功。

requests库的使用

发送请求

使用requests库前,需先导入requests模块。

import requests

接下来尝试获取某个页面内容。

import requests

r = requests.get('http://www.baidu.com')
print(r.text)

此时获得名为r的Response对象,可从中提取所需信息。

除GET请求外,还支持PUT、DELETE、HEAD及OPTIONS等HTTP请求方式。

首先查看GET请求的具体用法。

get请求

上述示例展示了使用GET方法获取百度首页,打印结果如下:

<!DOCTYPE html> <!--STATUS OK--><html> <head>......</body> </html>

Requests允许通过params关键字参数传递字符串字典形式的参数。例如,向httpbin.org/get传递key1=value1和key2=value2,代码如下:

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)

通过print(r.url)可打印输出URL。

http://httpbin.org/get?key2=value2&key1=value1

注意,字典中值为None的键不会添加到URL查询字符串中。

还可以将列表作为值传入:

payload = {‘key1’: ‘value1’, ‘key2’: [‘value2’, ‘value3’]}

范例

import requests  

url = 'http://httpbin.org/get'
params = {  
    'name': 'jack',  
    'age': 25
}  
r = requests.get(url, params = params)  
print(r.text)

输出结果

此处将请求参数封装为json 格式数据,并在GET方法中传给params 参数,完成带参数的GET请求URL拼接,免去手动拼接 http://httpbin.org/get?age=22&name=jack的繁琐过程。

此外,返回的r.tetx虽为字符串,但实为JSON格式格式,可通过r.json() 方法直接转换为JSON数据,避免引入 json 模块模块。示例如下:

import requests

url = 'http://httpbin.org/get'
params = {
    'name': 'jack',
    'age': 25
}
r = requests.get(url, params = params)
print(type(r.json()))
print(r.json())
print(r.json().get('args').get('age'))

输出结果

<class 'dict'> {'args': {'age': '25', 'name': 'jack'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.28.1', 'X-Amzn-Trace-Id': 'Root=1-6300e24d-71111778036e3f8339b55886'}, 'origin': '223.90.115.87', 'url': 'http://httpbin.org/get?name=germey&age=25'} 25

抓取二进制数据

上述示例展示了获取HTML文档,若需获取图片、视频或音频等二进制内容,应如何处理?

视频和音频本质为二进制码,获取二进制码即可获取各类媒体文件。接下来介绍如何获取二进制数据。

以百度站点图标为例:

import requests

r = requests.get('https://baidu.com/favicon.ico')
print(r.text)
print(r.content)
......  
b'\x00\......x00'

使用content属性可输出文档的二进制码,但如何处理这些二进制数据?

方法很简单,直接将其保存到本地即可。

import requests

r = requests.get('https://baidu.com/favicon.ico')
with open('favicon.ico', 'wb') as f:
    f.write(r.content)

运行后成功爬取图片,视频等其他二进制文件操作同理。

post请求

接下来介绍另一种请求方式:POST请求。

首先查看请求过程。

import requests

data = {'name': 'jack', 'age': '25'}
r = requests.post("http://httpbin.org/post", data=data)
print(r.text)

输出结果

此处通过data参数提交表单数据,完成POST请求。

同时,data参数可传入元组列表,当表单中多个元素使用同一key时,此方式尤为有效:

data = (('key1', 'value1'), ('key1', 'value2'))

POST请求的文件上传

范例

import requests

files = {'file': open('favicon.ico', 'rb')}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)

通过传入files参数实现文件上传,前提是open方法中的文件需存在(此处上传的是GET请求中获取的百度图标,不写路径表示当前目录,否则需完整路径)。该网站返回响应中包含files字段,form字段为空,表明文件上传由files字段标识。

利用requests返回响应状态码

r.status_code:获取响应状态码。

r.status_code == requests.codes.ok:内置状态码查询。

Response.raise_for_status():抛出异常的响应状态。

利用前两个方法可获得响应状态。

 r = requests.get('http://httpbin.org/get')
 r.status_code
200

查询状态

r.status_code == requests.codes.ok
True

若发送错误请求,可使用Response.raise_for_status()抛出异常。

r = requests.get('http://httpbin.org/status/404')
r.status_code
404

bad_r.raise_for_status()
Traceback (most recent call last):
  File "requests/models.py", line 832, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error

若响应正常,则不抛出异常,返回None。

到此这篇关于Python爬虫学习之requests的使用教程的文章就介绍到这了,更多相关Python requests内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表