Requests库学习笔记

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库学习做一个记录方便以后学习查阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值