requests模块(1)
提醒:
网页http://httpbin.org 已失效
一、介绍
requests模块和urllib模块拥有相同的功能,但是使用更加方便简洁。
二、基本用法
1、请求网页的方法
urllib库中的urlopen()方法实际上是以GET方式请求网页,而requests中相应的方法就是get()方法
import requests
r = requests.get('https://www.baidu.com/')
print(type(r))
print(r.status_code)
print(type(r.text))
print(r.text)
print(r.cookies) #直接输出cookies?输出
<class 'requests.models.Response'>
200
<class 'str'>
<html>
<head>
<script>
location.replace(location.href.replace("https://","http://"));
</script>
</head>
<body>
<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>
</body>
</html>
<RequestsCookieJar[<Cookie BIDUPSID=992C3B26F4C4D09505C5E959D5FBC005 for .baidu.com/>, <Cookie PSTM=1472227535 for .baidu.com/>, <Cookie __bsi=15304754498609545148_00_40_N_N_2_0303_C02F_N_N_N_0 for .www.baidu.com/>, <Cookie BD_NOT_HTTPS=1 for www.baidu.com/>]>这里我们调用get()方法实现与urlopen()相同的操作,得到一个Response对象,然后分别输出了Response的类型、状态码、响应体的类型、内容以及Cookies。 通过运行结果可以发现,它的返回类型是requests.models.Response,响应体的类型是字符串str,Cookies的类型是RequestsCookieJar。
其他请求方式
方法
2、Get请求
当我们使用get方法的时候,构建的请求是什么样子的呢?
输出
返回结果中包含请求头、URL、IP等信息。
2.1 添加信息
输出(注意params的位置)
与urllib相比,不需要对data进行编码
返回的结果是个str,但是是json格式的,因此很容易可以通过json方法将字符串变为字典格式
但需要注意的是,如果返回结果不是JSON格式,便会出现解析错误,抛出json.decoder.JSONDecodeError异常。
3、抓取网页
4、抓取二进制文件
图片、音频、视频这些文件本质上都是由二进制码组成的,由于有特定的保存格式和对应的解析方式,我们才可以看到这些形形色色的多媒体。所以,想要抓取它们,就要拿到它们的二进制码。
同样地,音频和视频文件也可以用这种方法获取。当媒体文件位于网页中时,需要找到它的URL,然后使用get方法得到这个文件的response,再按上面的方式保存即可。
5、POST请求
输出(注意data的位置)
疑问:data和parameters的区别在哪里?
6、状态码
状态码常用来判断请求是否成功,而requests还提供了一个内置的状态码查询对象requests.codes
输出
这里我们用requests.codes.ok得到的是成功的状态码200
返回码和相应的查询条件
Last updated
Was this helpful?