自动化脚本|第八部分:Python生态与实战应用 (Ecosystem & Applications)
欢迎来到Python的“自动化指挥中心”!我们每天在电脑上都会进行大量重复性的操作:定时检查邮件、在特定时间运行某个程序、填写网页表单、从网站上抓取信息……这些任务虽然简单,却耗费了我们大量的时间和精力。
Python,被誉为“胶水语言”,其核心优势之一就是能够轻松地将不同的系统和应用“粘合”在一起,实现流程自动化。本章,我们将学习几个强大的第三方库,它们能让你的Python脚本模拟人类行为,7x24小时不间断地为你工作。
我们将探索:
schedule
: 一个极其人性化的任务调度库,让你能用自然的语言来安排定时任务(“每分钟”、“每天10:30”)。pyautogui
: 你的“虚拟键盘和鼠标”。它能控制鼠标移动、点击、键盘输入,实现GUI界面的自动化操作。requests
+BeautifulSoup
: Web爬虫的黄金组合。requests
负责从网站获取HTML内容,BeautifulSoup
负责解析这些内容,从中提取出你需要的数据。
掌握了这些,你就能编写出各种实用的自动化脚本,从定时发送报告到自动抢票,从批量处理文件到监控网站变化,极大地解放你的生产力。
开始前的准备:
在命令行/终端中安装本章所需的库:
pip install schedule pyautogui requests beautifulsoup4 lxml
(lxml
是一个高效的HTML解析器,BeautifulSoup
会使用它)
25.1 任务调度 (schedule
库)
schedule
库的API设计得非常优雅和直观,几乎就像在写英文句子。
import schedule
import time
import datetime
def job_every_10_seconds():
print(f"这是一个每10秒执行一次的任务。当前时间: {datetime.datetime.now()}")
def job_every_minute():
print(f"这是一个每分钟执行一次的任务。当前时间: {datetime.datetime.now()}")
def job_at_specific_time():
print("这是一个在每天的特定时间 (例如16:30) 执行的任务。")
# --- 安排任务 ---
schedule.every(10).seconds.do(job_every_10_seconds)
schedule.every().minute.do(job_every_minute)
schedule.every().hour.do(job_every_minute) # 也可以每小时执行
schedule.every().day.at("16:30").do(job_at_specific_time)
schedule.every().monday.do(job_every_minute) # 每周一
schedule.every().wednesday.at("13:15").do(job_every_minute) # 每周三13:15
# --- 运行调度器 ---
print("任务调度器已启动... 按 Ctrl+C 退出")
while True:
# run_pending() 会检查当前是否有待执行的任务,并运行它们
schedule.run_pending()
time.sleep(1) # 每一秒检查一次,避免CPU空转
运行这个脚本,你将看到不同的任务会在预设的时间点被自动触发。
25.2 GUI自动化 (pyautogui
库)
pyautogui
可以让你用Python脚本来控制鼠标和键盘。这在自动化测试、操作那些没有提供API的桌面软件时非常有用。
⚠️ 安全警告: pyautogui
会直接控制你的电脑。在运行脚本时,请确保你有随时中断它的方法(比如将鼠标快速移动到屏幕的某个角落,pyautogui
默认开启了这种安全故障切换功能)。不要在无人看管的情况下运行复杂的自动化脚本。
一个简单的自动化“画图”脚本示例:
这个脚本会自动打开Windows的画图程序(或macOS的文本编辑),然后在画布上画一个正方形。
import pyautogui
import time
import sys
# 获取屏幕尺寸
screenWidth, screenHeight = pyautogui.size()
print(f"你的屏幕尺寸是: {screenWidth}x{screenHeight}")
# 移动鼠标到屏幕中央
pyautogui.moveTo(screenWidth / 2, screenHeight / 2, duration=1)
# --- 自动化操作 ---
print("自动化将在5秒后开始,请不要移动鼠标...")
time.sleep(5)
# 1. 打开程序 (这里以Windows的画图为例,macOS/Linux用户需修改)
if sys.platform == 'win32':
pyautogui.press('win')
time.sleep(1)
pyautogui.write('mspaint')
time.sleep(1)
pyautogui.press('enter')
time.sleep(2) # 等待程序打开
else:
# macOS/Linux 用户可以尝试打开文本编辑器
# pyautogui.hotkey('command', 'space')
# pyautogui.write('TextEdit')
# ... (后续操作类似)
print("请手动打开一个可以绘图或打字的窗口。")
time.sleep(5)
# 2. 在程序中画一个正方形
distance = 300
# 按住鼠标左键
pyautogui.mouseDown()
# 移动鼠标
pyautogui.moveRel(distance, 0, duration=0.5) # 向右
pyautogui.moveRel(0, distance, duration=0.5) # 向下
pyautogui.moveRel(-distance, 0, duration=0.5) # 向左
pyautogui.moveRel(0, -distance, duration=0.5) # 向上
# 松开鼠标左键
pyautogui.mouseUp()
print("自动化操作完成!")
25.3 Web爬虫 (requests
+ BeautifulSoup
)
Web爬虫是一种自动从网站上抓取信息的程序。这是Python应用最广泛的领域之一。
requests
: 负责扮演“浏览器”的角色,向服务器发送HTTP请求,并获取返回的HTML页面源代码。BeautifulSoup
: 负责扮演“解析器”的角色,它能将杂乱的HTML字符串转换成一个结构化的、易于导航的Python对象树。
案例:抓取Python官网首页的所有新闻标题
import requests
from bs4 import BeautifulSoup
# --- 1. 发送请求,获取网页HTML ---
url = "https://www.python.org/"
try:
response = requests.get(url)
# 检查请求是否成功 (状态码 200)
response.raise_for_status()
except requests.RequestException as e:
print(f"请求失败: {e}")
exit()
# --- 2. 使用 BeautifulSoup 解析HTML ---
# 'lxml' 是一个高效的解析器
soup = BeautifulSoup(response.text, 'lxml')
# --- 3. 查找目标数据 ---
# 通过浏览器开发者工具 (F12) 检查网页结构,我们发现新闻标题
# 位于一个 class="blog-widget" 的 div 下的 ul 里的 li a 标签中。
# BeautifulSoup 支持 CSS 选择器,非常方便!
news_widget = soup.select_one('.blog-widget') # select_one 找到第一个匹配的元素
if news_widget:
news_list = news_widget.select('ul li a') # select 找到所有匹配的元素
print("--- Python 官网最新新闻 ---")
for item in news_list:
# .text 获取标签内的文本内容
# item['href'] 获取标签的 href 属性值
title = item.text.strip()
link = url + item['href'].lstrip('/')
print(f"标题: {title}")
print(f"链接: {link}\n")
else:
print("未能找到新闻模块。")
运行这个脚本,它会像一个真正的用户一样访问Python官网,然后精准地将最新的新闻标题和链接提取并打印出来。
爬虫伦理与法律:
- 遵守
robots.txt
: 这是一个网站放在根目录的文本文件,规定了爬虫可以访问和不可以访问的页面。 - 不要频繁请求: 过快的请求会给服务器带来巨大压力,可能导致你的IP被封禁。适当增加延时 (
time.sleep()
)。 - 尊重版权: 抓取的数据仅用于学习和分析,不要用于商业目的或侵犯他人版权。
太棒了!你现在已经解锁了Python最强大的“超能力”之一——自动化。你学会了:
- 使用
schedule
让你的脚本按时按点、不知疲倦地工作。 - 使用
pyautogui
赋予你的脚本一双“虚拟的手”,去操作图形界面。 - 使用
requests
和BeautifulSoup
赋予你的脚本一双“智慧的眼”,去互联网上搜集信息。
你已经具备了将日常工作中大量重复性劳动交给Python来完成的能力,这是通往“懒惰”而高效的程序员之路的关键一步。
在教程的最后一部分,我们将为你提供一些附录与资源,包括一个快速备忘单、一些常见的面试题,以及继续深入学习的资源链接,为你的Python全方位学习之旅画上一个圆满的句号。