终于,学习笔记系列文章与你见面了。作为一个小站全新的非原创系列,我将尝试着探索目前人工智能的创造潜力上限,并在成文的过程中尽可能多地使用生成式人工智能(AIGC)技术。
本次「Python学习笔记」系列文章,全程仅使用了一段 103 字的用户提示词,其余内容均由 OpenAI 的 GPT-3.5 模型生成。
在成文过程中,我使用了独立开发者「方糖」开发的 DeepGPT 程序,这是一个使用 AgentGPT 的提示词在纯前端进行任务分拆和结果输出的程序。
最终,GPT-3.5 模型所创作的内容多达 29536 字,我使用半小时左右的时间进行了文字排版,以使内容符合一个小站的 排版规范 。同时,为了阅读方便,全文将分拆为若干章节发出。
当然,Python 也是我即将在大学学习的内容之一。在日后的学习中,我会根据实际需要对内容进行补充或者简单修改。
由于当前 AIGC 生成的内容的版权归属尚不明朗,本文不加「原创」标签。
Python中的Web框架
Python在Web开发中的应用越来越广泛,在这方面,Django
和Flask
框架是使用最为广泛的两个框架。
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')
上述代码首先定义了三个视图:index
、about
和contact
。其中,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)
在这个处理函数中,我们首先定义了模板需要的变量title
和content
,并使用render_template()
函数渲染模板。在渲染模板时,将变量传递给渲染函数即可。
部署
最后,Flask框架的部署也是非常简单的,只需要使用Web服务器(如:Nginx、Apache)来反向代理Flask应用程序即可。
综上所述,Python在Web开发中的应用非常广泛。Django和Flask框架是最受欢迎的两个Web框架。在使用这两个框架时,路由定义和模板渲染都是非常重要的,而连接数据库也是很常用的操作。在部署时,只需要使用Web服务器反向代理即可。
Python中的机器学习和计算机视觉库
Python中有许多流行的机器学习和计算机视觉库,如TensorFlow
、Keras
等,它们可以帮助我们训练和测试各种机器学习模型,如深度神经网络、卷积神经网络等。
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自动化测试框架对一个网站进行爬取
为实现该子任务,我们需要使用BeautifulSoup
和Selenium
两个库来对网站进行爬取和自动化测试。其中,BeautifulSoup
用于解析HTML代码,而Selenium
则在浏览器中模拟用户操作,可以实现网站自动化测试的功能。
首先,我们需要安装相应的库。在Python中,我们可以通过pip
来安装BeautifulSoup
和Selenium
库。具体安装方法如下:
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
打开网站,并通过循环遍历网站的所有页面,找到页面中的所有链接,并生成页面列表和链接列表。接下来,代码会遍历页面列表,获取每个页面的标题和描述,并统计页面中包含的图片数量和大小。最后,代码会计算每个页面的加载时间和响应时间,并生成完整的网站地图。
在该代码中,我们使用了多个Selenium
和BeautifulSoup
的函数来实现各种功能。其中,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实例
使用Selenium
的webdriver
模块创建一个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在自动化测试领域的应用,并且提供了一种实用的自动化测试工具。