这里的response.text返回的是Unicode格式,通常需要转换为utf-8格式,否则就是乱码。response.content是二进制模式,可以下载视频之类的,如果想看的话需要decode成utf-8格式。
提醒一下,不管是通过response.content.decode("utf-8)的方式还是通过response.encoding="utf-8"的方式都可以避免乱码的问题发生。
在requests库中,有几种常见的方法(请求方式):
import requests
requests.post(“http://httpbin.org/post”) #post请求
requests.put(“http://httpbin.org/put”) #put请求
requests.delete(“http://httpbin.org/delete”) #delete请求
requests.head(“http://httpbin.org/get”) #head请求
requests.options(“http://httpbin.org/get”) #options请求
(1)我们先来学习get请求:
最基本的get请求:
import requests
url = ‘https://www.baidu.com/’
response = requests.get(url)
print(response.text)
带参数的get请求:
如果想查询http://httpbin.org/get页面的具体参数,需要在url里面加上,例如我想看有没有Host=httpbin.org这条数据,url形式应该是http://httpbin.org/get?Host=httpbin.org
举个小例子(下面提交的数据是往这个地址传送data里面的数据):
import requests
url = ‘http://httpbin.org/get’
data = {
‘name’:‘zhangsan’,
‘age’:‘25’
}
response = requests.get(url,params=data)
print(response.url)
print(response.text)
我们来学习一下Json数据:
举个小例子:
import requests
import json
response = requests.get(“http://httpbin.org/get”)
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json())
print(response.json()[‘data’])
这里提醒大家:requests中**response.json()**方法等同于json.loads(response.text)方法。
接下来学习一下获取二进制数据:
在上面提到了response.content,这样获取的数据是二进制数据,用这个方法可以下载图片以及视频资源(图片和视频都是二进制流)。
现在我们要学习添加header
首先说,为什么要加header(头部信息)呢?例如下面,我们试图访问知乎的登录页面(当然大家都你要是不登录知乎,就看不到里面的内容),我们试试不加header信息会报什么错。
import requests
url = ‘https://www.zhihu.com/’
response = requests.get(url)
response.encoding = “utf-8”
print(response.text)
结果:
提示发生内部服务器错误(也就说你连知乎登录页面的html都下载不下来)。
500 Server Error
An internal server error occured.
因此,如果想访问就必须得加headers信息!
在浏览器中打开网站页面;
右键点击“检查”
选择“Network”
刷新一下页面
随便点击一个数据包
拉到下面
即可看到user-agent(就是我们需要的头部)
从此以后,就要记得在get方法中加入头部信息啦。
import requests
url = ‘https://www.zhihu.com/’
headers = {
‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36’
}
response = requests.get(url,headers=headers)
print(response.text)
这样肯定就能请求到页面了。
(2)post请求:
使用post请求把数据提交到url地址,等同于一字典的形式提交form表单里面的数据。看个小例子:
import requests
url = ‘http://httpbin.org/post’
data = {
‘name’:‘jack’,
‘age’:‘23’
}
response = requests.post(url,data=data)
print(response.text)
看看响应的结果:
{
“args”: {},
“data”: “”,
“files”: {},
“form”: {
“age”: “23”,
“name”: “jack”
},
“headers”: {
“Accept”: “/”,
“Accept-Encoding”: “gzip, deflate”,
“Connection”: “close”,
“Content-Length”: “16”,
“Content-Type”: “application/x-www-form-urlencoded”,
“Host”: “httpbin.org”,
“User-Agent”: “python-requests/2.13.0”
},
“json”: null,
“origin”: “118.144.137.95”,
“url”: “http://httpbin.org/post”
}
(3)request的高级操作:
文件上传
看个简单的小例子:
import requests
url = “http://httpbin.org/post”
files= {“files”:open(“test.jpg”,“rb”)}
response = requests.post(url,files=files)
print(response.text)
结果:
获取cookie
举个小例子:
import requests
response = requests.get(‘https://www.baidu.com’)
print(response.cookies)
for key,value in response.cookies.items():
print(key,‘==’,value)
会话维持
cookie的一个作用就是可以用于模拟登陆,做会话维持。