下饭文章,客官里面请
菜单
为什么要使用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':'1010866409@qq.com',
'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
库的相关操作就完成了,学习爬虫初级的这几天,我们能通过简单的方式来爬取页面的信息,明天就可以开始学数据的提取,处理了.希望有兴趣的客官点个赞再走,那么小二告退.