02 requests模块

requests模块的使用

一、安装

pip3 install requests

二、使用方法

2.1 get请求

header = {
     'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
     'referer': 'https://www.mzitu.com/225078/2'
 }
res = requests.get('https://www.mzitu.com/', headers=header)
res1=requests.get('https://i3.mmzztt.com/2020/03/14a02.jpg', headers=header)
with open('a.jpg', 'wb')as f:
    for line in res1.iter_content():
        f.write(line)

2.2 请求地址中携带数据(两种方式,推荐第二种)

from urllib.parse import urlencode,unquote  # url的编码和解码
print(unquote('%E7%BE%8E%E5%A5%B3'))
%E7%BE%8E%E5%A5%B3
header = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
}
# 第一种
res=requests.get('https://www.baidu.com/s?wd=美女',headers=header)
# 第二种
res=requests.get('https://www.baidu.com/s',headers=header,params={'wd':'美女'})
print(res.url)
print(res.text)

2.3 请求带cookie(两种方式)

# 方式一,在header中放
header = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36','cookie':'key=asdfasdfasdfsdfsaasdf;key2=asdfasdf;key3=asdfasdf'
}
res=requests.get('http://127.0.0.1:8000/index/',headers=header)
# 方式二:
header = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
}
# cookies是一个字典或者CookieJar对象
res=requests.get('http://127.0.0.1:8000/index/',headers=header,cookies={'key':'asdfasdf'})
print(res.text)

2.4 发送post请求,携带数据(urlencoded和json)

res=requests.post('http://127.0.0.1:8000/index/',data={'name':'nb'})
print(res.text)

res=requests.post('http://127.0.0.1:8000/index/',json={'age':18,},)
print(res.text)

2.5 自动携带cookie

session=requests.session()
res=session.post('http://127.0.0.1:8000/index/')  # 假设这个请求登录了
res1=session.get('http://127.0.0.1:8000/order/')  # 现在不需要手动带cookie,session会帮咱处理

2.6 response对象

respone=requests.post('http://127.0.0.1:8000/index/',data={'name':'laosepi'})
# print(respone.text)  # 响应的文本
# print(respone.content)  # 响应体的二进制
# print(respone.status_code)  # 响应状态码
# print(respone.headers)    # 响应头
# print(respone.cookies)   # cookie
# print(respone.cookies.get_dict()) #  把cookie转成字典
# print(respone.cookies.items())  # key和value
# print(respone.url)        # 请求的url
# print(respone.history)   #[]放重定向之前的地址
# print(respone.encoding)  # 响应的编码方式
# respone.iter_content()  # 图片,视频,大文件,一点一点循环取出来

# for line in respone.iter_content():
#     f.write(line)

2.7 编码问题

res=requests.get('http://www.autohome.com/news')
# 一旦打印出来出现乱码问题
# 方式一
res.encoding='gb2312'
# 方式二
res.encoding=res.apparent_encoding
print(res.text)

2.8 解析json

import json
respone=requests.post('http://127.0.0.1:8000/index/',data={'name':'lqz'})
# print(type(respone.text))  # 响应的文本
# print(json.loads(respone.text))
# print(respone.json())  # 相当于上面那句话
# print(type(respone.json()))  # json

2.9 高级用法之使用代理

respone=requests.get('http://127.0.0.1:8000/index/',proxies={'http':'代理的地址和端口号',})
# 代理,免费代理,收费代理花钱买
# 代理池:列表放了一堆代理ip,每次随机取一个,再发请求就不会封ip了
# 高匿和透明代理?如果使用高匿代理,后端无论如何拿不到你的ip,使用透明,后端能够拿到你的ip
# 后端如何拿到透明代理的ip,  后端:X-Forwarded-For
respone=requests.get('https://www.baidu.com/',proxies={'http':'27.46.20.226:8888',})
print(respone.text)

三、了解部分

3.1 高级用法之ssl(了解)

import requests
respone=requests.get('https://www.12306.cn') #不验证证书,报警告,返回200
print(respone.status_code)
# 使用证书,需要手动携带

import requests
respone=requests.get('https://www.12306.cn',
                     cert=('/path/server.crt',
                           '/path/key'))
print(respone.status_code)

3.2 超时设置

import requests
respone=requests.get('https://www.baidu.com',
                     timeout=0.0001)
# 0.0001秒的时间

3.3 认证设置(基本见不到了)

import requests
r=requests.get('xxx',auth=('user','password'))
print(r.status_code)

3.4 异常处理

import requests
from requests.exceptions import * #可以查看requests.exceptions获取异常类型

try:
    r=requests.get('http://www.baidu.com',timeout=0.00001)
except ReadTimeout:
    print('===:')
except Exception as e:
    print(e)

3.5 上传文件

res=requests.post('http://127.0.0.1:8000/index/',files={'myfile':open('a.jpg','rb')})
print(res.text)

四、模拟登录网站

http://www.aa7a.cn/
import requests
session=requests.session()
data = {
    'username': '*********@qq.com',
    'password': '******',
    'captcha': 'zdu4',
    'remember': 1,
    'ref': 'http://www.aa7a.cn/user.php?act=logout',
    'act': 'act_login',
}
rest = session.post('http://www.aa7a.cn/user.php',data=data)
print(rest.text)
# 拿到cookie
cookie=rest.cookies
print(cookie)

# 携带着cookies,表示登录了,页面中会有我们的用户信息*********@qq.com
rest1=session.get('http://www.aa7a.cn/index.php')
# rest1=requests.get('http://www.aa7a.cn/index.php')
print('*********@qq.com' in rest1.text)
# 查看是否存在(T/F)
原文地址:https://www.cnblogs.com/bailongcaptain/p/13439948.html