python_requests笔记

前言

-requests是一个很实用的Python HTTP客户端库,使用起来比urllib简洁很多,可用于网络请求和网络爬虫等。

  • 在使用前我们需要导入《 pip install requests 》 库,安装完成后,我们就可以正常使用了

一、GET请求

1.最基本的GET请求

import requests

request = requests.get('http://httpbin.org/get')

print(request.text)  # 返回响应的内容,unicode 类型数据

2.GET带参数请求

  • 第一种直接将参数放在url内
import requests

request = requests.get('http://httpbin.org/get?name=w&age=25')

print(request.text)
  • 第二种参数填写在dict中,发起请求时params参数指定为dict
import requests

data = {
    'name': 'w',
    'age': '25'
    }

request = requests.get('http://httpbin.org/get?', params=data)

print(request.text)

二、POST请求

1.最基本的POST请求

import requests

url = 'http://httpbin.org/'

# 字典类型参数
request = requests.post(url, data=data) 

# json类型参数
request = requests.post(url, json=data) 

2.POST带参数请求

  • 字典类型参数
import requests

url = 'http://httpbin.org/post'

data = {
    'key1': 'value1',
    'key2': 'value2'
    }

request = requests.post(url, data=data)

print(request.text)
  • json类型参数
import requests

url = 'http://httpbin.org/post'

data = {
    'key1': 'value1',
    'key2': 'value2'
    }

request = requests.post(url, json=data)
print(request.text)

三、其他请求方式

import requests

# 发送 DELETE 请求到指定 url
request = requests.delete('http://httpbin.org/delete')

# 发送 PATCH 请求到指定 url
request_1 = requests.patch('http://httpbin.org/patch')

# 发送 PUT 请求到指定 url
request_2 = requests.put('http://httpbin.org/put')

print(request.text)
print(request_1.text)
print(request_2.text)

四、添加headers

  • 有时候不加headers发起请求时,服务器会直接拒绝或服务器错误等,这个时候我们加上headers就可以了(get和post加入headers方法一样)
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
    }

request = requests.get('http://httpbin.org/get', headers=headers)

print(request.text)

五、response属性

import requests

response = requests.get('http://httpbin.org/get')

print(response.status_code)  # 返回 http 的状态码
print(response.url)  # 返回响应的 URL
print(response.headers)  # 返回响应头,字典格式
print(response.cookies)  # 返回一个 CookieJar 对象,包含了从服务器发回的 cookie
print(response.text)  # 返回响应的内容,unicode 类型数据

六、解析json

import requests
import json

request = requests.get('http://httpbin.org/get')

# 方法一
# 返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)
print(request.json())
print(type(request.json()))

# 方法二
# json.loads()和request.json()是一个意思,都是打印出一个字典数据
data = json.loads(request.text)
print(data)
print(type(data))

七、获取二进制数据

1、下载

  • 一般用来下载图片、视频和音频等
import requests

request = requests.get("http://httpbin.org/image/png")  # 将要下载的图片链接放这

print(type(request.text), type(request.content))  # 类型分别是str和bytes

print(request.text)

print(request.content)  # 获取二进制数据的方法
  • 获取到文件后,我们应该如何保存了,我们可以使用下面的方法
import requests
import os


def create_folder():
    '''创建文件夹'''
    folder_path = os.path.join(os.path.join(os.path.expanduser("~"), "Desktop"), "picture")
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)

    return folder_path


def download_files():
    url = "http://httpbin.org/image/png"
    request = requests.get(url)

    # 存放路径和文件名称拼接
    file_Path = os.path.join(create_folder(), "1.png")

    # 方法一 ,此方法是将数据一次性写入内存,如果文件较大,会导致内存"卡死"
    with open(file_Path, "wb") as f:
        f.write(request.content)

    # 方法二,此方法是将文件分块写入,每次写入指定大小,建议使用此方法
    with open(file_Path, "wb") as f:
        # chunk是指定每次写入的大小,单位字节(B)
        for chunk in request.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)


if __name__ == "__main__":
    download_files()

2、显示进度条

  • 安装 pip install tqdm
  • tqdm方法

# 例子一
from tqdm import tqdm
import time

for i in tqdm(range(50)):
    time.sleep(0.1)

# 例子二,带参数
d = {'info': 100}
# desc设置名称,ncols设置进度条长度.postfix以字典形式传入详细信息
for i in tqdm(range(50), desc='下载中', ncols=90, postfix=d):
    time.sleep(0.1)
  • 下载显示进度条
from tqdm import tqdm
import requests
import os


def create_folder():
    '''
    使用 os.path.expanduser("~") 方法获取用户主目录路径
    将获取到的用户主目录路径与 "Desktop" 文件夹名称和 "picture" 文件夹名称拼接起来
    如果该文件夹不存在,接下来的代码会判断并使用 os.makedirs() 方法递归地创建该文件夹
    '''
    folder_path = os.path.join(os.path.join(os.path.expanduser("~"), "Desktop"), "picture")
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)

    return folder_path


def download_files():
    url = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'
    file_data = requests.get(url)

    # 获取文件大小,单位字节(B)
    if "content-length" in file_data.headers:
        content_size = int(file_data.headers["content-length"])

        # 截取文件名称
        filename = url.split("/")[-1]

        # 存放路径和文件名称拼接
        file_Path = os.path.join(create_folder(), filename)

        # 表示每个数据块的大小为 128 字节 (B)
        chunk_size = 128
        progress_bar = tqdm(total=content_size, unit='iB', unit_scale=True,
                            bar_format='{l_bar}{bar:50}{r_bar}{bar:-10b}')
        with open(file_Path, 'wb') as file:
            for data in file_data.iter_content(chunk_size):
                if data:
                    progress_bar.update(len(data))
                    file.write(data)
        progress_bar.close()


if __name__ == "__main__":
    download_files()

八、上传文件

import requests

files = {"file": open("C:/Users/admin/Desktop/download/1.png", 'rb')}

request = requests.post("http://httpbin.org/post", files=files)  # 需要用post方法

print(request .text)

九、超时设置

import requests

try:
    request = requests.get("http://httpbin.org", timeout=1)  # 超过1秒就算超时

    print(request .status_code)

except Exception as f:
    print(f"请求超时:{f}")

十、认证设置

  • 有些网址需要用户名密码登录后才可以看到内容,方法如下:
import requests

request = requests.get("http://xxxxxx.com", auth=('user', 'possword'))

print(request.status_code)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值