1、为什么要学习requests,而不是urllib?
requests的底层实现就是urllib
requests在python2和python3中通用,方法完全一样
requests简单易用
requests能够自动帮助我们解压(gzip压缩的等)网页内容
2、requests的作用:发送网络请求,返回响应数据
3、如何使用requests来发送网络请求?
response = requests.get(url)
response的常用方法:
response.text(获取html str,解码类型默认ISO-8859-1,需要先修改解码方式)
response.content(注意python2与python3环境下的区别)推荐使用这种方式获取网页数据,python3环境下返回的是bytes类型数据,python2返回的是str
response.status_code(打印返回的网页状态码)
response.request.headers(请求头,注意是request而不是requests)
response.headers(响应头)
注意点:
一般情况下,网站不会设置默认编码方式,那么默认编码方式就是"ISO-8859-1"
利用requests.get(url)获取到网页请求的内容用response来接收,打印response是个对象。用response.text方法读取到的内容有乱码,由此可知response.text有自己的解码格式(text方法直接讲对象中字符串以文本形式输出,所以输出结果没有“”,这是与content方法有区别的地方),利用response.encoding属性可知response.text默认解码格式为ISO-8859-1,可修改解码方式,设置属性response.encoding = 'utf-8',然后再打印response.text即可
这样做稍有麻烦,可以直接打印response.content.
在python3环境下response.content是二进制bytes类型需要解码response.content.decode()转换为str数据类型,但在python2环境下不需要解码,直接使用response.content打印出来就是str类型
另外有的网站会直接设置编码方式为utf-8
获取网页内容的编解码问题的三种方式:
decode方式默认utf-8
decode('gbk')
response.text
text与content方法区别的补充:
text方法返回的是对象中字符串的文本,所以结果中没有“”;
content方法返回的是bytes类型需要解码成str
python2中,response.content类型为字符串,response.text类型为unicode。如果请求的网站没有设置编码方式,就是默认编码方式为ISO-8859-1,只要设置response.encoding="utf-8",response.content和response.text打印出来的都是解码后的中文;如果网站设置了编码方式,那么直接打印response.content和response.text即为解码后的中文。
python3中,responnse.content为bytes类型,response.text为str类型。response.content.decode()打印出来的是解码后的中文,而response.text在请求的网站没有设置编码的情况下需要设置response.encoding=”utf-8“,然后打印response.text即为解码后的中文;如果网站设置了编码方式为UTF-8,则直接打印response.text即为解码后的中文。
看不出来编码方式的字符,一定要打印或者type下类型
网友评论