2024.4.14 Python爬虫复习Day02

day02_web服务器优化

注意: 需要提前把资料中source目录复制到当前项目中

1.回顾基本web服务器

# 1.导包(fastapi和uvicorn)
from fastapi import FastAPI
from fastapi import Response
import uvicorn

# 2.创建对象(注意:创建对象的时候,类名后加小括号())
api = FastAPI()


# 3.让对象帮助咱们干活(接收浏览器请求并且给浏览器响应)
# 装饰器根据要访问的资源路径调用对应的函数
@api.get('/')
def show():
    return Response('load index.html...')


@api.get('/hm.jpg')
def show():
    return Response('load hm.jpg...')


# 4.启动服务器(必须传入上述创建的对象,注意:ip地址和端口号有默认,当然也可以自己指定)
uvicorn.run(api, host='127.0.0.1', port=9091)

2.web服务器_返回多资源

# 1.导包(fastapi和uvicorn)
from fastapi import FastAPI
from fastapi import Response
import uvicorn

# 2.创建对象(注意:创建对象的时候,类名后加小括号())
api = FastAPI()


# 3.让对象帮助咱们干活(接收浏览器请求并且给浏览器响应)
# 装饰器根据要访问的资源路径调用对应的函数
@api.get('/')
    #这一行使用FastAPI装饰器语法定义了一个路由。@api.get()指定了HTTP方法为GET,
# 并且当客户端访问根路径/时,将会触发接下来定义的show()函数。
# 这意味着,当用户在浏览器中访问http://your-server-url/时,会执行这个函数来处理请求。
def show():
    f = open('index.html', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@api.get('/index.html')
# 这一行使用FastAPI装饰器语法定义了一个路由。@api.get()指定了HTTP方法为GET,
# 并且当客户端访问路径/index.html时,
# 将会触发接下来定义的show()函数。这意味着,
# 当用户在浏览器中访问http://your-server-url/index.html时,会执行这个函数来处理请求。
def show():
    # 定义了一个名为show的函数,它将作为/index.html路由对应的处理器
    f = open('index.html', 'rb')
    # 在函数内部,使用Python内置的open()函数以二进制读取模式('rb')
    # 打开本地文件系统中的index.html文件,并将打开的文件句柄赋值给变量f。
    data = f.read()
    # 调用文件句柄f的read()方法,读取整个文件的内容并将其存储在变量data中。
    # 这里假设index.html是一个较小的文件,可以一次性读入内存。对于大文件,可能需要采用流式读取或其他策略。
    f.close()
    return Response(data)
    # 最后,函数返回一个Response对象。这个对象是由fastapi.Response类实例化而成的,
    # 其构造参数data被设置为之前读取到的HTML文件内容。
    # Response对象封装了HTTP响应的详细信息,包括响应体、状态码、头部等。在这里,
    # 我们只指定了响应体(即HTML文件内容),
    # 其余部分将使用FastAPI和HTTP协议的默认设置。
    # 返回这个Response对象后,FastAPI框架会将其转换为一个完整的HTTP响应,
    # 并通过运行中的Web服务器(如Uvicorn)发送回客户端。



@api.get('/hm.jpg')
def show():
    f = open('hm.jpg', 'rb')
    data = f.read()
    f.close()
    return Response(data)


# 4.启动服务器(必须传入上述创建的对象,注意:ip地址和端口号有默认,当然也可以自己指定)
uvicorn.run(api, host='127.0.0.1', port=9092)

3.web服务器_局域网ip

127.0.0.1: 回环地址,本身指代本地主机

ipconfig: 查看本机ip地址(局域网或者外网的ip都能查看)

注意: 在web服务器中如果服务器指定的是本地局域网分配的ip地址,那么此局域网内所有的主机都能互相访问
# 1.导包(fastapi和uvicorn)
from fastapi import FastAPI
from fastapi import Response
import uvicorn

# 2.创建对象(注意:创建对象的时候,类名后加小括号())
api = FastAPI()


# 3.让对象帮助咱们干活(接收浏览器请求并且给浏览器响应)
# 装饰器根据要访问的资源路径调用对应的函数
@api.get('/')
def show():
    f = open('index.html', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@api.get('/index.html')
def show():
    f = open('index.html', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@api.get('/hm.jpg')
def show():
    f = open('hm.jpg', 'rb')
    data = f.read()
    f.close()
    return Response(data)


# 4.启动服务器(必须传入上述创建的对象,注意:ip地址和端口号有默认,当然也可以自己指定)
# 注意: web服务器指定本地的实际局域网地址
uvicorn.run(api, host='192.168.86.41', port=9093)

4.web服务器_实战

# 实战需求: 已知source资源,要求搭建一个web服务器,启动并可以让客户端远程访问资源
# 1.导包
from fastapi import FastAPI
from fastapi import Response
import uvicorn

# 2.创建对象
zs = FastAPI()


# 3.对象帮助咱们接收浏览器请求,并且给浏览器响应
# 浏览器输入url: 协议/域名:端口号/资源路径
# 注意: get后面就是url里的资源路径
@zs.get('/')
def show():
    f = open('source/html/index.html', mode='r', encoding='utf8')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/index.html')
def show():
    f = open('source/html/index.html', mode='rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/gdp.html')
def show():
    f = open('source/html/gdp.html', mode='rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/images/0.jpg')
def show():
    f = open('source/images/0.jpg', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/images/1.jpg')
def show():
    f = open('source/images/1.jpg', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/images/2.jpg')
def show():
    f = open('source/images/2.jpg', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/images/3.jpg')
def show():
    f = open('source/images/3.jpg', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/images/4.jpg')
def show():
    f = open('source/images/4.jpg', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/images/5.jpg')
def show():
    f = open('source/images/5.jpg', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/images/6.jpg')
def show():
    f = open('source/images/6.jpg', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/jzc.avi')
def show():
    f = open('source/video/jzc.avi', 'rb')
    data = f.read()
    f.close()
    return Response(data)


# 4.启动服务器
uvicorn.run(zs, host='192.168.86.41', port=9094)

5.web服务器_处理所有图片

# 实战需求: 现有的服务器代码,重复代码多,不利于以后扩展,需要升级优化
# 1.导包
from fastapi import FastAPI
from fastapi import Response
import uvicorn

# 2.创建对象
zs = FastAPI()


# 3.对象帮助咱们接收浏览器请求,并且给浏览器响应
# 浏览器输入url: 协议/域名:端口号/资源路径
# 注意: get后面就是url里的资源路径
@zs.get('/')
def show():
    f = open('source/html/index.html', mode='r', encoding='utf8')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/index.html')
def show():
    f = open('source/html/index.html', mode='rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/gdp.html')
def show():
    f = open('source/html/gdp.html', mode='rb')
    data = f.read()
    f.close()
    return Response(data)

@zs.get('/render.html')
def show():
    f = open('source/html/render.html', mode='rb')
    data = f.read()
    f.close()
    return Response(data)


# 自动接收用户在浏览器输入的url,然后自动截取图片名赋值给img_name
@zs.get('/images/{img_name}')
def show(img_name):
    f = open(f'source/images/{img_name}', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/jzc.avi')
def show():
    f = open('source/video/jzc.avi', 'rb')
    data = f.read()
    f.close()
    return Response(data)


# 4.启动服务器
uvicorn.run(zs, host='192.168.86.41', port=9095)

6.web服务器_处理其他资源

# 实战需求: 现有的服务器代码,重复代码多,不利于以后扩展,需要升级优化
# 1.导包
from fastapi import FastAPI
from fastapi import Response
import uvicorn

# 2.创建对象
zs = FastAPI()


# 3.对象帮助咱们接收浏览器请求,并且给浏览器响应
# 浏览器输入url: 协议/域名:端口号/资源路径
# 注意: get后面就是url里的资源路径
# 接收的url请求: http://192.168.86.41:9096/
@zs.get('/')
def show():
    f = open('source/html/index.html', mode='r', encoding='utf8')
    data = f.read()
    f.close()
    return Response(data)


# 自动接收用户在浏览器输入的url,然后自动截取文件名赋值给html_name
# 接收的url请求: http://192.168.86.41:9096/页面或者其他资源
@zs.get('/{html_name}')
def show(html_name):
    f = open(f'source/html/{html_name}', 'rb')
    data = f.read()
    f.close()
    return Response(data)


# 自动接收用户在浏览器输入的url,然后自动截取图片名赋值给img_name
# 接收的url请求: http://192.168.86.41:9096/images/图片
@zs.get('/images/{img_name}')
def show(img_name):
    f = open(f'source/images/{img_name}', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/video/{vi_name}')
def show(vi_name):
    f = open(f'source/video/{vi_name}', 'rb')
    data = f.read()
    f.close()
    return Response(data)


# 4.启动服务器
uvicorn.run(zs, host='192.168.86.41', port=9096)

7.web服务器_withopen

1.with open格式
    with open(文件路径,文件模式,文件编码) as f:
        读写操作
        
2.with open特点: 可以自动关闭文件对象	
# 实战需求: 现有的服务器代码,重复代码多,不利于以后扩展,需要升级优化
# 1.导包
from fastapi import FastAPI
from fastapi import Response
import uvicorn

# 2.创建对象
zs = FastAPI()


# 3.对象帮助咱们接收浏览器请求,并且给浏览器响应
# 浏览器输入url: 协议/域名:端口号/资源路径
# 注意: get后面就是url里的资源路径
# 接收的url请求: http://192.168.86.41:9096/
#
@zs.get('/')
def show():
    # with open任何情况下,文件都会自动关闭
    with open('source/html/index.html', mode='r', encoding='utf8') as f:
        data = f.read()

    return Response(data)


# 自动接收用户在浏览器输入的url,然后自动截取文件名赋值给html_name
# 接收的url请求: http://192.168.86.41:9096/页面或者其他资源
@zs.get('/{html_name}')
def show(html_name):
    with open(f'source/html/{html_name}', 'rb') as f:
        data = f.read()
    return Response(data)


# 自动接收用户在浏览器输入的url,然后自动截取图片名赋值给img_name
# 接收的url请求: http://192.168.86.41:9096/images/图片
@zs.get('/images/{img_name}')
def show(img_name):
    f = open(f'source/images/{img_name}', 'rb')
    data = f.read()
    f.close()
    return Response(data)


@zs.get('/video/{vi_name}')
def show(vi_name):
    f = open(f'source/video/{vi_name}', 'rb')
    data = f.read()
    f.close()
    return Response(data)


# 4.启动服务器
uvicorn.run(zs, host='192.168.86.41', port=9096)


  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白白的wj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值