Requests库学习笔记
安装requests
pip3 install requests
请求
import requests
requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')
GET请求
# 普通请求
import requests
response = requests.get('https://www.baidu.com')
print(response.url)
# 带参数请求
import requests
data = {'name': 'xiaoming', 'age': 22}
response = requests.get('https://www.baidu.com', params=data)
print(response。url)
# 以上两串代码运行结果
https://www.baidu.com/
https://www.baidu.com/?name=xiaoming&age=22
解析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()))
# 以上代码执行结果
<class 'str'>
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.22.0'}, 'origin': '124.160.215.59, 124.160.215.59', 'url': 'https://httpbin.org/get'}
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.22.0'}, 'origin': '124.160.215.59, 124.160.215.59', 'url': 'https://httpbin.org/get'}
<class 'dict'>
# 可以看到response.json()和json.loads(response.text)输出的内容是完全相同的
获取二进制数据
# 以获取github章鱼猫的图标为例(视频相同)
import requests
response = requests.get("https://github.com/favicon.ico")
print(type(response.text), type(response.content))
with open('github.ico', 'wb') as f:
f.write(response.content)
f.close()
# 运行结果如下
<class 'str'> <class 'bytes'>
还会在运行路径下得到章鱼猫的图标
添加headers
如果不加headers的话,有时候会被禁掉或则出现错误
# 不加headers访问知乎
import requests
response = requests.get("https://www.zhihu.com/explore")
print(response.text)
# 运行结果如下
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>openresty</center>
</body>
</html>
如上代码,出现了一个400的错误,所以我们需要加上headers
import requests
headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ×××××××××××"}
response = requests.get("https://www.zhihu.com/explore", headers=headers)
print(response.text)
# 这个headers可以打开自己的浏览器,在调出开发者工具,随便在一个请求中找到
# 代码大家可以自行运行
基本POST请求
# POST以表单的形势提交,所以需要传入数据
import requests
data = {'hello': 'world'}
response = requests.post("https://httpbin.org/post", data=data)
print(response.text)
# 运行代码,可以看到我们的数据已经加入进去了
响应
我们可以通过状态码来判断服务器响应的情况,状态码都有对应的名字,我们就不需要记住具体的数值了。
具体状态码可以在这查看------>状态码查看
# 判断状态码是否为200,访问成功
import requests
response = requests.get("https://httpbin.org/get")
exit() if not response.status_code == requests.codes.ok else print("Request Successfully")
高级操作
文件上传
# 以之前下载github.ico为例
import requests
file = {'file': open('github.ico', 'rb')}
response = requests.post("https://httpbin.org/post", files=file)
print(response.text)
# 运行上述代码,你可以看到file已经上传
获取cookie
import requests
response = requests.get("https://wwww.baidu.com")
print(response.cookies)
for key, value in response.cookies.items():
print(key + " = " + value)
会话维持
用来模拟登录状态
# 先设置cookies,再获取
import requests
requests.get("http://httpbin.org/cookies/set/number/123456789")
response = requests.get("http://httpbin.org/cookies")
print(response.text)
# 以上代码运行结果
{
"cookies": {}
}
可以看到,我们设置的cookies并没有,因为我们的两次请求是分别独立的,就像我们用一个浏览器设置了cookies,然后用另外一个浏览器来访问,自然是访问不到之前设置的cookies的。
import requests
s = requests.Session()
s.get("http://httpbin.org/cookies/set/number/123456789")
response = s.get("http://httpbin.org/cookies")
print(response.text)
# 上述代码运行结果
{
"cookies": {
"number": "123456789"
}
}
在我们需要维持登陆的时候,我们就可以使用上述方法。
证书验证
# 可以使用verify来关闭证书验证,默认是true
import requests
response = requests.get("https://www.12306.cn", verify=False)
print(response.status_code)
# 还可以手动添加证书
import requests
response = requests.get("https://www.12306.cn", cert=('/path/server.crt', '/path/key'))
print(response.status_code)
代理设置
# 设置代理
import requests
proxies = {"http": "http://127.0.0.1:1080", "https": "https://127.0.0.1:1080"}
response = requests.get("https://www.baidu.com", proxies=proxies)
print(response.status_code)
# 如果你本地开启代理了,那才可以正常运行,如果你的代理需要用户名和密码,那就这样写
proxies = {"http": "http://user.password@127.0.0.1:1080"}
除了http,还有socks代码,使用这个socks需要额外安装一个包
sudo pip3 install pysocks
安装完成后代码就可以正常运行了
import requests
proxies = {
"http": "socks5://127.0.0.1:1080",
"https": "socks5://127.0.0.1:1080"
}
response = requests.get("https://wwww.baidu.com", proxies=proxies)
print(response.status_code)
超时设置
超时设置实际上就是设置一个timeout,时间内没有得到应答的话就会抛出一个异常
import requests
response = requests.get("https://httpbin.org/get", timeout=1)
print(response.status_code)
# 超过一秒的话会抛出一个requests.exceptions.ReadTimeout异常
认证设置
有一些网站在登录的时候需要输入用户名和密码才能够正常访问,我们可以如下操作
# 第一种方法
import requests
from requests.auth import HTTPBasicAuth
response = requests.get("https://xxx", auth=HTTPBasicAuth('user', 'password'))
print(response.status_code)
# 第二种方法
import requests
response = requests.get("https://yyyy", auth=('user', 'password'))
print(response.status_code)
初入爬虫,对requests库学习做一个记录方便以后学习查阅