requests:
在这篇博客里面,我们介绍了urlib库的使用(https://blog.csdn.net/qq_33432841/article/details/108007545),但它存在许多不方便的地方,例如在处理网页验证和Cookies时,需要写Opener 和 Handler 来处理。 接下来介绍的requests 对于上面的解决都不是问题。
在使用该库之前,要确保自己的电脑已经安装好 requests 库。
下面来看一个例子,学习一下:
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)
调用 get ()方法实现与 urlopen ()相同的操作,得到一个 Res pon se 对象,然后分别输出了 Response 的类型、状态码、响应体的类型、内容以及 Cookies 。
GET 请求:
HTTP 中最常见的请求之一就是 GET 请求。
接下来,我们先看一个小案例:
import requests
r = requests.get('http://httpbin.org/get')
print(r.text)
输出结果,如下图所示:
利用params 参数,来构造链接:
import requests
data = {'name':'germey',
'age':12}
r = requests.get('http://httpbin.org/get',params=data)
print(r.text)
输出结果为:
通过运行结果可以判断,请求的链接自动被构造成了: "http://httpbin.org/get?name=germey&age=12"
网页的返回类型实际上是 str 类型,但是它很特殊,是 JSON 格式的 。 所以,如果想直接解析返回结果,得到一个字典格式的话,可以直接调用 json ()方法.
具体实例如下:
import requests
r = requests.get('http://httpbin.org/get')
print(type(r.text))
print(r.json())
print (type(r. json()))
运行结果为:
从上面的运行结果可以发现:调用 json ()方法,就可以将返回结果是 JSON 格式的字符串转化为字典。
如果返回结果不是 JSON 格式,便会出现解析错误,抛出 json.decoder. JSONDcodeError异常。
- 抓取二进制数据:
实例:
'''图片,音频,视频 本质上都是由二进制码组成'''
import requests
r = requests.get("https://github.com/favicon.icon")
with open('favicon.ico','wb') as f:
f.write(r.content)
open ()方法,它的第一个参数是文件名称,第二个参数代表以二进制写的形式打开,可以向文件里写入二进制数据 。
运行结束后,会出现个名为 favicon.ico 的图标。
点击查看可以看到github 站点图标。
- 添加 headers:
例如下面的例子:
import requests
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36'
}
r = requests.get('https://www.zhihu.com/explore', headers = headers)
print(r.text)
POST 请求:
先上来一个小案例:
import requests
data = {'name':'germey','age':24}
r = requests.post('http://httpbin.org/post')
print(r.text)
运行结果:
响应:
我们在发送请求时,得到的自然就是响应。在上面的实例中,使用 text 和 content 获取了响应的内容。还有很多属性和方法可以用来获取其他信息,比如状态码、响应头、 Cookies 等
import requests
r = requests.get('http://httpbin.org/get')
print(type(r.status_code), r.status_code)
print(type(r. headers), r. headers)
print (type(r. cookies), r. cookies)
print(type(r. url), r. url)
print(type(r.history), r.history)
响应,就不做过多的赘述。