使用requests 请求库, 我们可以更方便并且更简单的完成发送请求,获取响应等业务。
下载:
pip install requests
使用requests库可以轻易的向服务器发送各种请求方式并获取响应, 下面来让我们了解一下requests 请求库的强大之处
GET 请求:
import requests
r = requests.get('https://www.httpbin.org/get')
print(r.text)
在requests 库中, 如果想要发送一个get请求是很简单的, 直接调用get方法,将URL 传入其中, 返回的同样是一个 Response 的相应对象, 当我们获取这个响应对象
params 参数:
如果想在URL 中携带查询参数 则需要使用到params 参数, 只需要构造一个参数字典, 然后使用params 参数接受这个字典即可
import requests
data = {
'name': 'germey',
'age': 25
}
r = requests.get('https://httpbin.org/get', params=data)
print(r.text)
此外, 由于这个URL地址返回的响应调用 text 属性后返回的是一个字符串, 其实是一个JSON数据, 我们可以调用 json() 方法, 将其转为字典对象, 方便后续处理, 这里需要注意的是, 返回的响应体必须是json 数据才可以调用json() 方法进行转换, 否则会抛出异常
import requests
data = {
'name': 'germey',
'age': 25
}
r = requests.get('https://httpbin.org/get', params=data)
# print(r.text)
# <class 'str'>
print(type(r.text))
# <class 'dict'>
print(type(r.json()))
添加请求头:
还有一个更为重要的请求头参数 headers 使用这个参数, 可以做一些基本的 ua 伪装
import requests
url = 'https://www.baidu.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0'
}
response = requests.get(url, headers=headers)
print(response.text)
POST 请求:
使用requests 发送一个post请求同样很简单
import requests
data = {'name': 'germey', 'age': '25'}
r = requests.post("https://www.httpbin.org/post", data=data)
print(r.text)
将请求体参数定义在一个字典中, 然后调用post方法, 将字典传递给 data参数即可完成一个post请求。
响应:
当我们发送请求获取响应后, 其请求返回的是一个Response 对象, 既然是一个对象,那么就可以调用它的方法及属性了。
import requests
r = requests.get('https://ssr1.scrape.center/')
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)
高级用法:
前面介绍了基本的请求, 例如,get,post,等, 解下来让我们了解一下如何使用requests 操作文件上传, Cookie设置, 代理设置等
文件上传:
使用files参数, 可以完成文件上传的功能, 其接收的也是一个字典对象,
import requests
files = {'file': open('favicon.ico', 'rb')}
r = requests.post('https://www.httpbin.org/post', files=files)
print(r.text)
Cookie 设置:
我们可以将cookie放在请求头中, 然后通过headers参数传递, 同样也可以通过 cookies 参数来操作, 但是需要构建一个cookiejar 对象, 才能传递给cookies 参数
cookies = '_octo=GH1.1.1849343058.1576602081; _ga=GA1.2.90460451.1576602111; __Host-user_session_same_site=nbDv62kHNjp4N5KyQNYZ208waeqsmNgxFnFC88rnV7gTYQw_; _device_id=a7ca73be0e8f1a81d1e2ebb5349f9075; user_session=nbDv62kHNjp4N5KyQNYZ208waeqsmNgxFnFC88rnV7gTYQw_; logged_in=yes; dotcom_user=Germey; tz=Asia%2FShanghai; has_recent_activity=1; _gat=1; _gh_sess=your_session_info'
jar = requests.cookies.RequestsCookieJar()
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36'
}
for cookie in cookies.split(';'):
key, value = cookie.split('=', 1)
jar.set(key, value)
r = requests.get('https://github.com/', cookies=jar, headers=headers)
print(r.text)
Session 状态保持:
使用session对象, 可以更方便的为我们自动管理cookie等信息,实现状态保持
import requests
session = requests.Session()
response = session.get('https://www.baidu.com')
忽略证书警告:
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get('https://ssr2.scrape.center/', verify=False)
print(response.status_code)
import logging
import requests
logging.captureWarnings(True)
response = requests.get('https://ssr2.scrape.center/', verify=False)
print(response.status_code)
身份认证:
# 第一种方式
import requests
from requests.auth import HTTPBasicAuth
r = requests.get('https://ssr3.scrape.center/', auth=HTTPBasicAuth('admin', 'admin'))
print(r.status_code)
# 第二种方式
import requests
r = requests.get('https://ssr3.scrape.center/', auth=('admin', 'admin'))
print(r.status_code)
此外, requests库还提供了其它的认证方式, 如 OAuth 认证, 不过需要额外下载扩展包
pip install requests_oauthlib
import requests
from requests_oauthlib import OAuth1
url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
auth = OAuth1('YOUR_APP_KEY', 'YOUR_APP_SECRET',
'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
requests.get(url, auth=auth)
代理设置:
在requests库中, 设置代理只需要使用 proxies 参数即可
import requests
proxies = {
'http': 'http://10.10.10.10:1080',
'https': 'http://10.10.10.10:1080',
}
requests.get('https://httpbin.org/get', proxies=proxies)
proxies = {'https': 'http://user:password@10.10.10.10:1080/',}
requests.get('https://httpbin.org/get', proxies=proxies)
如果设置的代理是 socks 协议代理, 则需要额外安装
pip install requests[socks]
import requests
proxies = {
'http': 'socks5://user:password@host:port',
'https': 'socks5://user:password@host:port'
}
requests.get('https://httpbin.org/get', proxies=proxies)
完....