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 File_plus():
    '''
    文件储存位置
    判断文件是否存在,不存在则创建
    '''
    folder_path = "C:/Users/admin/Desktop/download/"
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)

    return folder_path


def run():
    file_name = File_plus()
    request = requests.get('http://httpbin.org/image/png')

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

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


if __name__ == "__main__":
    run()

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 File_plus():
    '''
    文件储存位置
    判断文件是否存在,不存在则创建
    '''
    folder_path = "C:/Users/admin/Desktop/download/"
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)

    return folder_path


def run():
    image_data = requests.get('http://httpbin.org/image/png')

    # 获取图片大小,单位B
    if "content-length" in image_data.headers:
        content_size = int(image_data.headers["content-length"])

        # 图片名称
        image_name = "1.png"

        # 存储图片,每次写入1M
        with open(f"{
      
      File_plus()}{
      
      image_name}", "wb") as f, tqdm(
            desc=image_name,
            total=content_size
        ) as bar:
            # chunk是指定每次写入的大小,单位字节
            for chunk in image_data.iter_content(chunk_size=1024*1024):
                if chunk:
                    f.write(chunk)
                    #  加上进度条
                    bar.update(len(chunk))


if __name__ == "__main__":
    run()

八、上传文件

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)

猜你喜欢

转载自blog.csdn.net/qq_45664055/article/details/126776207