系列文章目录
- Python爬虫教程-前言
- Python爬虫教程-初识网络爬虫
- Python爬虫教程-爬虫分类
- Python爬虫教程-网络通信(补习,不熟悉的同学赶紧看)
- Python爬虫教程-Requests: 让 HTTP 服务人类
文章目录
前言
在网络时代,与服务器进行数据交互是许多应用程序不可或缺的一部分。为了满足这一需求,Python提供了一款强大而简单易用的库——Requests。通过Requests,我们能够以人类友好的方式发送HTTP请求,并轻松处理服务器的响应。
本教程旨在为初学者提供Requests库的基础知识,帮助大家快速上手并应用于实际项目中。在这里,你将学习到如何安装Requests库、发送基本的GET请求以及添加headers和查询参数等核心操作。同时,我们还会介绍响应对象的常用属性,让你能够更全面地掌握服务器的响应信息。
无论你是Web开发者、数据分析师还是网络爬虫爱好者,Requests都将成为你与服务器交互的得力助手。希望通过本教程,你能够快速掌握Requests的基本用法,并在实际应用中发挥出它的强大功能。让我们一同进入Requests的世界,探索与服务器交互的无限可能吧!
一、Requests: 让 HTTP 服务人类
尽管Python标准库中的urllib模块已经提供了许多常用的HTTP功能,但其API的使用体验并不友好。相比之下,Requests库自称是"HTTP for Humans",意味着它提供了更简洁方便的API,让人类使用HTTP服务更加轻松顺畅。
Requests是Python的一个HTTP库,它的底层其实使用的是urllib库执行实际的HTTP请求,但表面上对urllib进行封装并提供更友好的API,使得实际使用中requests相比urllib更加方便易理解。因此,它在继承了urllib所有特性的同时又可以安全地为人类所使用。 具体而言,Requests支持HTTP连接保持和连接池、使用cookie保持会话、文件上传、自动确定响应内容的编码、国际化的URL以及POST数据自动编码等功能,这些功能都大大简化了HTTP请求的处理过程。
1. Requests的优点
- 人性化的API设计:相比urllib模块,Requests的API更加友好,大大提高了开发者的使用效率。
- 完备的文档支持:Requests提供非常详尽的文档,包括API文档、用户指南等,便于开发者学习和使用。更难得的是,它还提供中文文档,这对于中文用户来说是一个极大的便利。
- 跨平台支持:Requests支持Python 2.6到3.5的版本,并且可以在PyPy下运行,这让Requests在不同的平台上都有很好的适应性。
- 基于urllib的底层实现:Requests基于urllib进行底层实现,保证了其稳定性和效率,同时又通过封装提供了更简洁的接口,可谓集稳定性和易用性于一身。
- 开源项目,活跃社区:Requests是一个开源项目,这意味着任何人都可以查看、使用、修改和分发其源代码。这不仅可以增加开发者的信任度,也有助于形成一个围绕该项目的活跃社区,能快速解决遇到的问题。
中文文档:
http://docs.python-requests.org/zh_CN/latest/index.html
开源地址:https://github.com/kennethreitz/requests
二、安装方式
Requests库可以通过pip或easy_install进行安装。以下是两种安装方式:
使用pip安装:
$ pip install requests
使用easy_install安装:
$ easy_install requests
安装完成后,您就可以开始使用Requests库来发送HTTP请求了。
三、基本的GET请求
1. 发送基本的GET请求
要使用Requests库发送基本的GET请求,只需要使用requests.get(url)
方法,其中url是您要发送请求的网址。这将返回一个响应对象,其中包含了服务器的响应内容。以下是一个简单的示例:
# 第一步,导入requests库
import requests
# 使用get方法发送请求
response = requests.get("http://www.baidu.com/")
这将向指定的URL发送一个GET请求,并将响应存储在response
对象中。
2. 添加headers和查询参数
为了更灵活地发送GET请求,您可以添加headers和查询参数:
- 要添加headers,请在请求中传入headers参数,并为其提供一个字典,其中包含您要发送的请求头信息。
- 要添加查询参数,可以使用params参数,向其提供一个字典,其中包含您要添加的查询参数及其对应的值。Requests库会自动将字典转换为URL编码的查询字符串。
import requests
kw = {'wd': '长城'}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
}
# params接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,无需使用urlencode()
response = requests.get("http://www.baidu.com/s?", params=kw, headers=headers)
# 查看响应内容,response.text返回的是Unicode格式的数据
print(response.text)
# 查看响应内容,response.content返回的字节流数据(注意这里有个笔误,原文中是respones.content,应改为response.content)
print(response.content)
# 查看完整url地址
print(response.url)
# 查看响应头部字符编码
print(response.encoding)
# 查看响应状态码
print(response.status_code)
3. 响应对象的常用属性
在这个例子中,我们向http://www.baidu.com/s?
发送了一个带有查询参数和请求头的GET请求。我们通过打印response.text
查看响应的文本内容,也可以通过response.content
查看响应的原始二进制内容。同时,我们还可以获取到完整的URL地址、响应的字符编码以及响应的状态码。
下面是响应对象的常用属性,很重要需要记住:
- response.text:返回响应的文本内容,Requests会自动解码响应内容,您可以直接获得Unicode格式的数据。
- response.content:返回响应的原始二进制内容,适用于处理图片等二进制文件。
- response.url:返回请求的完整URL地址,这在使用查询参数时非常有用。
- response.encoding:返回响应的字符编码,让您了解响应内容的编码方式。
- response.status_code:返回响应的状态码,用于检查请求是否成功以及了解服务器的处理结果。
总结
本文将带你初步认识requests库。requests库学起来非常的简单,你会发现无论是发送基本的GET请求还是添加headers和查询参数,Requests库都提供了简洁易用的接口,让HTTP请求的处理更加简单和高效。
响应的常用属性需要记忆,后面会经常用到。一定要注意区分content
和text
的区别,知道在何时该用那种方式获取相应的响应内容。