urllib和requests哪个好用?

requests是基于Python开发的HTTP库,与urllib标准库相比,它不仅使用方便,而且能节约大量的工作。实际上,requests是在urllib的基础上进行了高度的封装,它不仅继承了urllib的所有特性,而且还支持一些其他的特性,例如,使用Cookie保持会话、自动确定响应内容的编码等,可以轻而易举地完成浏览器的任何操作。 Python技术文章2021-06-23 |传智教育 |urllib和requests哪个好用

好口碑IT培训

requests是基于Python开发的HTTP库,与urllib标准库相比,它不仅使用方便,而且能节约大量的工作。实际上,requests是在urllib的基础上进行了高度的封装,它不仅继承了urllib的所有特性,而且还支持一些其他的特性,例如,使用Cookie保持会话、自动确定响应内容的编码等,可以轻而易举地完成浏览器的任何操作。

requests库中提供了如下常用的类:

(1) requests.Request:表示请求对象,用于将一个请求 发送到服务器。

(2) requests.Response:表示响应对象,其中包含服务器对HTTP请求的响应。

(3) requests.Session:表示请求会话,提供Cookie持久性、连接池和配置。

其中,Request 类的对象表示一个请求, 它的生命周期针对一个客户端请求,一旦请求发送完毕,该请求包含的内容就会被释放掉。而Session类的对象可以跨越多个页面,它的生命周期同样针对的是一个客户端。 当关闭这个客户端的浏览器时,只要是在预先设置的会话周期内(一般是20~30 min),这个会话包含的内容会一直存在,不会被马上释放掉。例如,用户登永某个网站时,可以在多个IE窗口发出多个请求。

requests库与urllib库代码对比

与urllib库相比,requests库更加深得人心,它不仅能够重复地读取返回的数据,而且过能自动确定响应内容的编码。为了能让大家直观地看到这些变化,下面分别使用urllib库和requests库爬取百度网站中“传智教育”关键字的搜索结果网页。

(1)使用urllib库以GET请求的方式爬取网页。具体代码如下:

# 导入请求和解析模块
import urllib.request
import urllib.parse
# 请求的URL路径和查询参数
url = "http://www.baidu.com/s"
word = {"wd": "传智教育"}
# 转换成url编码格式(字符串)
word = urllib.parse.urlencode(word)
# 拼接完整的URL路径
new_url = url + "?" + word
print(new_url)
# 请求报头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
# 根据URL和headers构建请求
request = urllib.request.Request(new_url, headers=headers)
# 发送请求,并接收服务器返回的文件对象
response = urllib.request.urlopen(request)
# 使用read()方法读取获取到的网页内容,使用UTF-8格式进行解码
html = response.read().decode("UTF-8")
print(html)

(2)使用requests库以GET请求的方式爬取网页。具体代码如下:

# 导入requests库
import requests
# 请求的URL路径和查询参数
url = "http://www.baidu.com/s"
param = {"wd": "传智教育"}
# 请求报头
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Safari/605.1.15"}
# 发送GET请求,返回一个响应对象
response = requests.get(url, params=param, headers=headers)
# 查看响应的内容
print(response.text)

比较上述两段代码不难发现,使用requests库减少了发送请求的代码量。下面再从细节上体会一下库的便捷之处,具体如下:

(1)无须再转换为URL路径编码格式拼接完整的URL路径。

(2)无须再频繁地为中文转换编码格式。

(3)从发送请求的函数名称,可以很直观地判断发送到服务器的方式。

(4)urlopen()方法返回的是一个文件对象, 需要调用read()方法次性读取;而get()函数返回的是一个响应对象,可以访问该对象的text属性查看响应的内容。

这里虽然只初步介绍了requests库的用法,但是也可以从中看出,整个程序的逻辑非常易于理解,更符合面向对象开发的思想,并且减少了代码量,提高了开发效率,给开发人员带来了便利。

Python教程原创教程

用Python的正则表达式爬取电影天堂的信息

2021-7-6 20:49:05

Python教程

fsimage和edit的区别【大数据面试问题】

2021-7-8 22:05:30

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索