学习Python编程:从基础到实践(8)

终于,学习笔记系列文章与你见面了。作为一个小站全新的非原创系列,我将尝试着探索目前人工智能的创造潜力上限,并在成文的过程中尽可能多地使用生成式人工智能(AIGC)技术。

本次「Python学习笔记」系列文章,全程仅使用了一段 103 字的用户提示词,其余内容均由 OpenAI 的 GPT-3.5 模型生成。

在成文过程中,我使用了独立开发者「方糖」开发的 DeepGPT 程序,这是一个使用 AgentGPT 的提示词在纯前端进行任务分拆和结果输出的程序。

最终,GPT-3.5 模型所创作的内容多达 29536 字,我使用半小时左右的时间进行了文字排版,以使内容符合一个小站的 排版规范 。同时,为了阅读方便,全文将分拆为若干章节发出。

当然,Python 也是我即将在大学学习的内容之一。在日后的学习中,我会根据实际需要对内容进行补充或者简单修改。

由于当前 AIGC 生成的内容的版权归属尚不明朗,本文不加「原创」标签。


Python中的Web框架

Python在Web开发中的应用越来越广泛,在这方面,DjangoFlask框架是使用最为广泛的两个框架。

Django

Django是一个重量级的Web框架,它提供了完整的MVC(Model-View-Controller)架构、ORM(Object Relational Mapping)等功能。Django使用Python语言编写,是Python最受欢迎的Web框架之一。

以下是一个使用Django框架创建简单Web应用程序的例子:

from django.http import HttpResponse
from django.shortcuts import render

# 创建视图
def index(request):
    return HttpResponse("Hello, world!")

# 使用模板
def about(request):
    return render(request, 'about.html')

# 处理请求
def contact(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        email = request.POST.get('email')
        message = request.POST.get('message')
        # 处理表单数据
        return HttpResponse("Thank you for contacting us!")
    else:
        return render(request, 'contact.html')

上述代码首先定义了三个视图:indexaboutcontact。其中,index返回一个”Hello, world!“的响应,about使用模板渲染about.html页面,contact处理用户提交的表单数据。

路由定义

在Django框架中,路由定义是非常重要的。路由定义决定了请求(Request)应该交给哪个处理函数来处理。路由定义使用Python的装饰器来实现。示例如下:

from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.hello),
]

这段代码中,我们导入了Django中的路径模块,并导入了视图模块(views.py)。然后,我们通过urlpatterns列表定义了一个路由,将访问“/hello/”路径的请求交给views.py中的hello函数来处理。

模板渲染

另外,在Django中,模板渲染也是非常常用的功能。Django提供了一个模板引擎,使用Jinja2语法。示例如下:

<html>
  <head>
    <title>{{title}}</title>
  </head>
  <body>
    <h1>{{content}}</h1>
  </body>
</html>

在这个示例中,我们使用了Jinja2语法,通过{}来引用变量,在返回的HTML页面中会被替换为具体的值。在Django中,我们可以将这个模板渲染为具体的HTML结果,示例如下:

from django.shortcuts import render

def hello(request):
    context = {'title': 'Hello World', 'content': 'Welcome to Django'}
    return render(request, 'hello.html', context)

在这段处理函数中,我们将模板渲染为具体的HTML结果,并将其返回给用户。

连接数据库

此外,在Django中连接数据库也是非常常见的操作。Django框架内置了ORM(Object Relational Mapping)系统,可以很好地处理数据库操作。下面是一个连接MySQL数据库的示例代码:

import mysql.connector
from django.conf import settings

def get_db_connection():
    db_config = settings.DATABASES['default']
    conn = mysql.connector.connect(
        host=db_config['HOST'],
        user=db_config['USER'],
        password=db_config['PASSWORD'],
        database=db_config['NAME'],
        port=db_config['PORT']
    )
    return conn

在这段代码中,我们首先从Django的配置中获取了数据库的连接信息。然后,我们使用mysql.connector模块来建立数据库连接,并返回连接对象。在使用时,只需要从函数中获取连接对象,再进行相应的数据库操作即可。

Flask

Flask框架是一个轻量级的Web框架,它提供了灵活的开发方式、麻雀虽小五脏俱全的功能,并且易于学习和使用。Flask框架使用Python语言编写,是Python生态中的一个重要组成部分。

路由定义

在Flask框架中,路由定义也是非常重要的。路由定义使用Python的装饰器来实现。示例如下:

from flask import Flask

app = Flask(__name__)

@app.route('/hello')
def hello():
    return 'Hello, World!'

在这段代码中,我们首先导入了Flask模块,在应用程序中创建了一个Flask对象。然后,我们使用@app.route()装饰器来定义路由。最后,我们定义了一个处理函数hello(),用来处理访问“/hello”路径的请求。当用户访问该路径时,系统会自动调用该函数并将返回结果渲染在浏览器上。

模板渲染

在Flask框架中,模板渲染也是非常常用的功能。Flask框架内置了一个简单而灵活的模板引擎,使用Jinja2语法。示例如下:

<html>
  <head>
    <title>{{ title }}</title>
  </head>
  <body>
    <h1>{{ content }}</h1>
  </body>
</html>

在这个示例中,我们同样使用了Jinja2语法,通过{}来引用变量,在返回的HTML页面中会被替换为具体的值。在Flask中,我们可以将这个模板渲染为具体的HTML结果,示例如下:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/hello')
def hello():
    title = 'Hello World'
    content = 'Welcome to Flask'
    return render_template('hello.html', title=title, content=content)

在这个处理函数中,我们首先定义了模板需要的变量titlecontent,并使用render_template()函数渲染模板。在渲染模板时,将变量传递给渲染函数即可。

部署

最后,Flask框架的部署也是非常简单的,只需要使用Web服务器(如:Nginx、Apache)来反向代理Flask应用程序即可。

综上所述,Python在Web开发中的应用非常广泛。Django和Flask框架是最受欢迎的两个Web框架。在使用这两个框架时,路由定义和模板渲染都是非常重要的,而连接数据库也是很常用的操作。在部署时,只需要使用Web服务器反向代理即可。

Python中的机器学习和计算机视觉库

Python中有许多流行的机器学习和计算机视觉库,如TensorFlowKeras等,它们可以帮助我们训练和测试各种机器学习模型,如深度神经网络、卷积神经网络等。

TensorFlow

以下是一个使用TensorFlow库创建一个简单的图像分类任务的例子:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.datasets import cifar10

# 加载数据集
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

# 归一化处理
x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0

# 定义模型
model = keras.Sequential(
    [
        keras.Input(shape=(32, 32, 3)),
        layers.Conv2D(32, 3, activation='relu'),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, 3, activation='relu'),
        layers.MaxPooling2D(),
        layers.Conv2D(128, 3, activation='relu'),
        layers.Flatten(),
        layers.Dense(64, activation='relu'),
        layers.Dense(10),
    ]
)

# 编译模型
model.compile(
    optimizer=keras.optimizers.Adam(1e-3),
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=["accuracy"],
)

# 训练模型
model.fit(x_train, y_train, batch_size=64, epochs=10, validation_split=0.2)

# 评估模型
_, test_acc = model.evaluate(x_test, y_test, verbose=2)
print("Test dataset accuracy:", test_acc)

上述代码首先加载了一个名为”cifar10“的数据集,然后使用TensorFlow定义了一个简单的卷积神经网络模型,包含三个卷积层、两个全连接层和一个输出层。接下来,编译该模型,并使用训练集进行训练。最后,评估该模型的测试集准确性。

Python 新技术实践

使用Python的BeautifulSoup和Selenium自动化测试框架对一个网站进行爬取

为实现该子任务,我们需要使用BeautifulSoupSelenium两个库来对网站进行爬取和自动化测试。其中,BeautifulSoup用于解析HTML代码,而Selenium则在浏览器中模拟用户操作,可以实现网站自动化测试的功能。

首先,我们需要安装相应的库。在Python中,我们可以通过pip来安装BeautifulSoupSelenium库。具体安装方法如下:

pip install beautifulsoup4
pip install selenium

接下来,我们需要编写代码来爬取网站并生成地图。以下是一份Python代码示例:

from bs4 import BeautifulSoup
from selenium import webdriver

def get_website_info(url):
    # 使用Selenium打开网站
    driver = webdriver.Chrome()
    driver.get(url)

    # 获取网站页面数量和链接数量
    pages = []
    links = []
    pages.append(url)
    links.append(url)
    current_page = 0

    while current_page < len(links):
        try:
            driver.get(links[current_page])
            soup = BeautifulSoup(driver.page_source, 'html.parser')

            for link in soup.find_all('a'):
                href = link.get('href')
                if href.startswith('http') and href not in links:
                    links.append(href)

            current_page += 1
        except:
            pass

    # 获取每个页面的标题和描述
    titles = []
    descriptions = []
    for page in pages:
        driver.get(page)
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        title = soup.find('title').text
        desc = soup.find('meta', attrs={'name': 'description'})
        if desc:
            desc = desc.get('content')
        else:
            desc = ''
        titles.append(title)
        descriptions.append(desc)

    # 获取页面中的图片数量和大小
    images = []
    for page in pages:
        driver.get(page)
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        img_tags = soup.find_all('img')
        img_count = len(img_tags)
        img_size = 0
        for img in img_tags:
            src = img.get('src')
            if src.startswith('http'):
                img_size += int(driver.execute_script("return fetch(arguments[0]).then(function(response){return response.blob();}).then(function(blob){return blob.size;});", src))
        images.append((img_count, img_size))

    # 获取页面加载时间和响应时间
    load_times = []
    response_times = []
    for page in pages:
        driver.get(page)
        load_time = driver.execute_script("return window.performance.timing.loadEventEnd - window.performance.timing.navigationStart;")
        response_time = driver.execute_script("return window.performance.timing.responseEnd - window.performance.timing.requestStart;")
        load_times.append(load_time)
        response_times.append(response_time)

    # 关闭浏览器
    driver.quit()

    # 生成网站地图
    sitemap = []
    for i in range(len(pages)):
        sitemap.append((pages[i], titles[i], descriptions[i], images[i], load_times[i], response_times[i]))

    return sitemap

website_url = "https://www.example.com"
sitemap = get_website_info(website_url)

# 输出网站地图
for page in sitemap:
    print(page[0], page[1], page[2], page[3], page[4], page[5])

该代码会从指定的网站URL开始,使用Selenium打开网站,并通过循环遍历网站的所有页面,找到页面中的所有链接,并生成页面列表和链接列表。接下来,代码会遍历页面列表,获取每个页面的标题和描述,并统计页面中包含的图片数量和大小。最后,代码会计算每个页面的加载时间和响应时间,并生成完整的网站地图。

在该代码中,我们使用了多个SeleniumBeautifulSoup的函数来实现各种功能。其中,driver.get()函数可以打开指定的网站页面,soup.find_all()soup.find()函数在页面中搜索指定的HTML元素,img.get('src')获取图片的URL。另外,我们还使用了JavaScript脚本来获取图片的大小,这通过Selenium的execute_script()函数实现。

总的来说,这个任务是涉及到Python爬虫和自动化测试的操作,可以帮助初学者深入了解Python在这些领域的应用,并且可以提供一种实用的爬虫工具。

使用Python的Pillow库和OpenCV库对指定的图片进行处理和识别

针对当前任务,我们可以使用Python的Pillow库和OpenCV库进行图像处理和识别。以下是解决每个子任务的详细响应:

打开和显示图像

  • 使用Pillow库的Image模块中的open()函数打开图像,并使用show()函数显示图像。代码示例:
from PIL import Image

img = Image.open('image.jpg')
img.show()

调整图像大小和比例

使用Pillow库的Image模块中的resize()函数调整图像大小。可以指定所需的宽度和高度,也可以指定百分比来调整大小。代码示例:

from PIL import Image

img = Image.open('image.jpg')
new_img = img.resize((800, 600))  # 调整为800x600的大小
new_img.show()

转换图像格式(如JPEG、PNG、BMP等)

使用Pillow库的Image模块中的save()函数将图像转换为指定格式。代码示例:

from PIL import Image

img = Image.open('image.jpg')
img.save('image.png')

图像增强和处理(如灰度化、二值化、滤波等)

使用OpenCV库中的函数实现图像增强和处理,具体可以使用cv2.cvtColor()函数进行灰度化处理,使用cv2.threshold()函数进行二值化处理,使用cv2.filter2D()函数进行滤波处理等。代码示例:

import cv2

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 灰度化
ret, thres = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)  # 二值化
kernel = np.ones((5, 5), np.float32) / 25  # 定义5x5的卷积核
blur = cv2.filter2D(img, -1, kernel)  # 滤波处理
cv2.imshow('gray', gray)
cv2.imshow('thres', thres)
cv2.imshow('blur', blur)
cv2.waitKey()
cv2.destroyAllWindows()

图像识别和分类(如人脸识别、文字识别等)

使用OpenCV库的人脸识别、文字识别等模块进行图像识别和分类。例如,可以使用cv2.CascadeClassifier()函数进行人脸识别。代码示例:

import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()

通过以上代码示例,我们可以使用Python的Pillow库和OpenCV库对指定的图片进行处理和识别,实现图像增强和处理、图像识别和分类等功能。这有助于初学者深入了解Python在图像处理和计算机视觉领域的应用,并提供一种实用的图像处理工具。

通过Python的Selenium和ChromeDriver对特定网站进行自动化测试

测试报告应该包括测试结果的总结、错误详细信息以及建议的改进措施。该任务旨在让初学者了解Python在自动化测试领域的应用,并为他们提供一种实用的自动化测试工具。

使用Python的Selenium库和ChromeDriver进行自动化测试的步骤如下:

安装Selenium和ChromeDriver

首先需要安装Selenium库和ChromeDriver。可以使用pip命令来安装Selenium库,然后去Chrome官网下载对应版本的ChromeDriver,将其解压并将路径配置到系统环境变量中。

导入Selenium库和其他相关库

在Python脚本中,需要导入Selenium库以及其他可能需要使用的库,例如time库用于等待页面加载。

创建ChromeDriver实例

使用Seleniumwebdriver模块创建一个ChromeDriver实例。代码示例:

from selenium import webdriver

driver = webdriver.Chrome()

打开网页

使用ChromeDriver实例的get()方法打开要测试的网页。代码示例:

driver.get("https://www.example.com")

进行测试

按照任务要求进行测试,包括测试网页元素加载速度、网页响应时间、链接的正确性、表单的填写和提交等。可以使用Selenium的各种功能和方法来模拟用户操作,例如find_element()方法来查找网页元素,send_keys()方法来填写表单,click()方法来点击提交按钮等。代码示例:

# 查找并测试网页元素加载速度
element = driver.find_element_by_tag_name('div')
print("Element Loaded in:")
print(element.value_of_css_property('display'))

# 测试网页响应时间
start_time = time.time()
driver.get("https://www.example.com")
end_time = time.time()
print("Response Time:")
print(end_time - start_time)

# 测试链接的正确性
link_element = driver.find_element_by_link_text('Example Link')
link_element.click()
assert driver.current_url == 'https://www.example.com/links'

# 测试表单的填写和提交
input_element = driver.find_element_by_name('username')
input_element.send_keys('example@example.com')
submit_button = driver.find_element_by_css_selector('button[type="submit"]')
submit_button.click()

生成测试报告

根据测试结果生成测试报告,包括测试结果的总结、错误详细信息以及改进措施的建议。可以使用Python的文件操作功能将测试报告保存到文件中,或者使用第三方库来生成更美观的测试报告。

关闭浏览器

完成所有测试后,关闭ChromeDriver实例。代码示例:

driver.quit()

通过以上步骤,我们可以使用Python的Selenium库和ChromeDriver实现对特定网站的自动化测试,并生成相应的测试报告。这有助于初学者深入了解Python在自动化测试领域的应用,并且提供了一种实用的自动化测试工具。

《学习Python编程:从基础到实践(8)》是发布于 上的文章。如文中出现错误或侵犯了您的权益,请于评论区指正或发送邮件到 admin@ygxz.in

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇