requests.get和urlopen的比较(通俗易懂)

requests.get和urlopen的比较

urlopen详解见:https://blog.csdn.net/qq_41845823/article/details/119465293

requests.get详解见:https://blog.csdn.net/qq_41845823/article/details/119516178

urlopen简介

urlopenurllib库中的一个方法,简单用法为urllib.request.urlopen(url),返回的是一个http.client.HTTPResponse对象。

其实不了解这个对象没关系,一般我们是想用这个方法来爬取一些静态页面上的数据,这个是完全没问题的,直接用该对象的read()方法读出即可,不过可能涉及到转码,具体如下操作:

import urllib.request

# 看清楚是http协议,不是https协议,现在去用该方法获取百度的源码,https是拿不到的
response = urllib.request.urlopen('http://www.baidu.com')
print(response.read().decode('utf-8'))

该方法可以满足我们大部分的需求,这就是python的强大。

requests.get简介

requests库是比urllib库更加方便地爬虫库,简单用法为requests.get(url),返回是一个requests.models.Response对象

同样地,我们可以不了解这个对象,只需要会用就行。

对返回对象取text即可获得网页内容,取content即可获得二进制流来获取图片,视频,音频等文件。

区别

在简单地获取响应用法上两者没有区别,没有什么谁比谁好之说

但是网络协议并不是这么简单

比如请求包含四部分(有的地方还有请求空行):

  • 请求行
  • 请求头
  • 请求体

每一部分都包含有网络请求协议中的一些重要信息,比较常见的就是请求头部的user-agentcookies等信息,或者post请求中添加的键值,或者代理、认证等功能,在这方面两者的差异就显现出来了。

  • 发起不同请求时,比如post请求:在urlopen中要在方法内部添加设置好的参数data详见urlopen详解见data需要转码;而requests库中只需要放到data参数中使用request.post()方法即可
  • 设置代理:在urlopen中需要以proxy_handler作为参数使用urllib.request.build_opener获得一个opener,最后使用opener.open('http://httpbin.org/post')来设置代理并发送请求;而在requests中只需要在requests.get()方法中添加proxies参数即可
  • 还有cookies等信息,在requests库中可以直接获得

总结

urlopenrequests.get方法都能满足最基本的爬取数据的需求,在这点上没有什么区别,但是在爬取一些安全性比较高的网站的时候,需要进行代理,用户等信息的设置,只能说requests.get设置起来更加方便,但是两者爬取的效果是相同的。

爬虫大家都听说过scrapy框架,但是需要注意的是,在进行爬取数据的时候,最常用的还是requests而并不是scrapy框架,只有一些非常大的数据才会使用到框架,比如需要爬取GB,TB大小的数据,而requests并不是为scrapy做基础,requests能满足我们大部分的需求。

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值