爬虫(7)一文搞懂爬虫的网络请求,requests库的使用

下饭文章,客官里面请

为什么要使用requests库?

客官说了:我们都有了request模块能处理爬虫的网络请求了,为啥还要学requests库?
传送门:到url.request模块
request模块的基本用法
我:哎,这个问题就问的特别有意思!我们的request库的确能处理网络请求,但是urllib库中大多数的API让我们感觉不是很友好(其实就是操作很麻烦),而requests库用起来方便又快捷.
又有客官问了: 那都方便快捷到哪里了?
我:本文带你看看?

安装requests库

	pip install requests

发送get请求

发送get请求,直接调用requests.get函数就ok了,想要发送什么样的请求就,调用什么样的方法.requests.post

import requests
response = requests.get('http://www.baidu.com/')

resquests的一些重要的属性:

#encoding: utf-8
import requests
response = requests.get('http://www.baidu.com/')
#text函数,使用的是自己猜想的解码方式,如果不造成乱码,那么就用text,如果造成乱码就使用content
#print(response.text)
print(response.content.decode('utf-8'))
#response.url获取网页的完整路径
print(response.url)
#response.encoding查看响应头部的字符编码
print(response.encoding)
#查看响应码
print(response.status_code)

客官请留步

response.text和response.content的区别:

1.response.content:这个是直接从网络上抓取的数据,没有经过任何的编码.所以是一个bytes类型的,其实在硬盘上和在网络上传输的字符串都是bytes类型.
2.response.text:这个数str的数据类型,是requests库将response.content进行编码的字符串,解码需要指定一个编码方式,requests会根据自己的猜测来判断解码的方式,所以有的时候会猜测错误,从而造成乱码,这时候应该用response.content.encode('utf-8').decode('utf-8')

有的客官会讲:你这人怎么回事,讲了get请求不讲post请求,搞哪样

发送post请求

发送post请求也非常简单,直接调用requests.post就可以了
如果返回的是json数据,那么可以用response.json()来将json字符串转换为字典或者列表.

使用代理

在外面把代理的路径写好,直接在请求方法中传递proxies就可以了.
前面的文章中有介绍免费的代理网站和代理的基础概念,我应该给客官们一个传送门resquest中使用代理

处理cookie信息

客官们,讲真的requests库是真的方便哦,你看看前面的功能都比url,request模块的实现方便了太多,现在我们再来看看requests库是怎么处理cookie信息的:

#同样是实现的是登录并爬取大鹏的页面
import requests
url = 'http://www.renren.com/Plogin.do'
data = {
	'email':'[email protected]',
	'passward':'python1234'
}
headers = {
	 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',

}
# 这里的session不是web中的session,它代表的是一次会话,它是一个对象
#那么什么是一次会话呢,一次会话就是浏览器关闭一次,会话就结束,但是同一次会话的数据是共享的,这样就实现了cookie信息的共享,保证了我们的登录
session = resquests.session()
#对session对象进行post请求操作,操作后session中就有了cookie信息了,这时也有一个响应,但是我们不需要得到这个响应,因此不接收了
session.post(url,data,headers = headers)
#再用同一个session对象再进行了一个get请求,这时我们得到一个响应
response = session.get('http://www.renren.com/880151247/profile')
#为了方便查看,我把爬取的页面写入到一个页面.
with open('renren_dapeng.html','w') as fp:
	fp.writer(response.text)

这里很有趣,当我们使用的是requests库如上处理cookie信息时,我们传入的data的账号和密码是正确的,我们就会进入到大鹏的主页,如果传入的账号和密码是错误的,我们就进入的是登录的页面.这样的操作很优雅,而不像url.request模块那样会抛出异常.
再来一个传送门,看看url.request模块是怎么处理cookie信息的
url.request模块处理cookie信息

至此我们今天学习的requests库的相关操作就完成了,学习爬虫初级的这几天,我们能通过简单的方式来爬取页面的信息,明天就可以开始学数据的提取,处理了.希望有兴趣的客官点个赞再走,那么小二告退.

发布了76 篇原创文章 · 获赞 21 · 访问量 3425

猜你喜欢

转载自blog.csdn.net/qq_40742223/article/details/105521257