一、实例引入
import requests
r = requests.get('http://www.baidu.com/')
print(type(r))
print(r.status_code)
print(type(r.text))
print(r.text)
print(r.cookies)
运行结果:
urllib库中的urlopen()方法实际上是以Get方式请求网页,而request中相应的方法就是get()方法。我们通过调用get()方法实现与urlopen()相同的操作得到了一个r对象,然后分别输出了r的类型、状态码、响应体的类型、内容、以及Cookies。通过运行可以发现,它的返回类型是requests.models.Response,响应体的类型是str(字符串),Cookies的类型是RequestsCookieJar。requests更方便之处在与其他的请求类型依旧可以用一句话完成。
实例:
import requests
r = requests.post('http://httpbin.org/post')
r = requests.put('http://httpbin.org/put')
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/put')
r = requests.options('http://httpbin.org/put')
二、get请求
1.基本写法:
import requests
r = requests.get('http://httpbin.org/get')
print(r.text)
运行结果:我们成功发起了Get请求,返回结果中包含请求头、URL、IP等信息
2.带参数的Get请求
对于Get请求如果要附加额外的信息。如:现在要添加两个参数,其中Name是germey,age是22.
实例1:
import requests
r = requests.get('http://httpbin.org/get?name=germy&age=22')
print(r.text)
运行结果:
但是一般情况下,这种信息会用字典来存储,因此我们也可以用params这个参数来构造
import requests
data = {
'name':"germey",
'age':22
}
response = requests.get("http://httpbin.org/get", params=data)
print(response.text)
运行结果:
另外,网页的返回类型实际上是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.JSONDecodeError异常
3.抓取二进制数据:
实例:
import requests
r = requests.get("https://github.com/favicon.ico")
# Response对象的两个属性
print(type(r.text),type(r.content))
print(r.text)
print(r.content)
# 它的第一个参数是文件名称,第二个参数代表以二进制写的形式打开,可以向文件里写入二进制数据。
运行结果:可以注意到前者出现了乱码,后者结果前带有一个b,这代表是bytes类型的数据。由于图片是二进制数据,所以前者在打印时转化为str(字符串)类型,也就是图片直接转化为字符串,这理所当然会出现乱码。
接着我们将提取的图片保存下来:
import requests
r = requests.get("https://github.com/favicon.ico")
with open('favicon.ico','wb')as f:
#利用了Open()方法,它的第一个参数是文件名称,第二个参数代表以二进制写的形式打开
#可以向文件里写入二进制数据
f.write(r.content)
f.close()
运行结束可以发现项目文件夹出现了名为favicon.ico的图标。同样的我们可以保存视频和音频。
4.添加headers
知乎对网站有着特殊的限制,我们如果不传递headers就不能正常的请求。
实例:
import requests
r = requests.get("https://www.zhihu.com/explore")
print(r.text)
运行结果: