9个 Python 库,摆脱重复手动操作
本文约3000字,建议阅读5分钟本文介绍了 9 个 Python 自动化库,可实现网页、邮件等场景自动操作。“小王,帮我把这个网站上的所有发票自动下载下来,每天中午12点前整理好发我邮箱。”
你看了看手里的需求,内心OS:又要写Selenium脚本,又要处理验证码,还得对接邮件…
如果我说,这些事用9个Python库就能搞定,而且代码不超过20行呢?
核心概念类比:互联网自动化的“人设”对应
如果你把互联网想象成一个巨大的政务大厅:
requests / selenium 就像排队窗口,笨重但稳定
而今天要介绍的这些库,则是VIP通道、绿色通道、甚至秘密后门——它们专治各种“凭什么我只能手动操作”的不甘
下面这9个库,每一款都能让你的代码像长了手一样,自动填表、截图、发消息、收邮件,甚至绕过API限制爬取数据。
1. MechanicalSoup
会填表的“乖浏览器”
就像一个听话的实习生,你告诉他“打开登录页,填用户名密码,点提交”,他就照做,不会多开一个标签页。
# 环境:Python 3.8+import mechanicalsoupbrowser = mechanicalsoup.StatefulBrowser()browser.open("https://github.com/login")browser.select_form('form[action="/session"]')browser["login"] = "your_username"browser["password"] = "your_password"browser.submit_selected() print(browser.get_url()) # 输出:https://github.com/ 登录后首页复杂度:时间 O(加载页面时间),空间忽略不计
适用场景:表单提交、简单登录、无需JS渲染的网站。
⚠️ 注意:如果页面有大量JavaScript动态加载内容,MechanicalSoup会“失灵”——这时候就该请出下面的Pyppeteer了。
2. Pyppeteer
头号Chrome手术刀
Selenium像是开着卡车冲进商场,Pyppeteer则是派一个隐形人进去精准取货。
# 环境:Python 3.7+,首次运行会自动下载Chromiumimport asynciofrom pyppeteer import launchasync def screenshot(): browser = await launch(headless=True) # 无头模式 page = await browser.newPage() await page.goto("https://news.ycombinator.com") await page.screenshot({"path": "hn.png"}) await browser.close()asyncio.get_event_loop().run_until_complete(screenshot())# 运行后当前目录生成 hn.png复杂度:内存占用约100-200MB,首次启动稍慢,但后续执行极快。
扩展思考:国内类似场景(如支付宝、淘宝自动化)建议使用 pyppeteer-stealth 插件,避免被反爬识别。
3. Telethon
Telegram的“神级遥控器”
别人用机器人(Bot)是点外卖,你用Telethon是直接接管了整个厨房。
# 环境:Python 3.6+,需申请API ID和API Hashfrom telethon import TelegramClientapi_id = 12345api_hash = "your_api_hash"client = TelegramClient("anon", api_id, api_hash)asyncdef main(): await client.start() asyncfor msg in client.iter_messages("me"): print(msg.sender_id, msg.text)client.loop.run_until_complete(main())# 输出:自己的消息记录(可自动存档)⚠️ 注意:用Telethon登录时,Telegram会向你的手机发送验证码,代码里需要处理await client.sign_in(code),切勿硬编码验证码。
国内实践:虽然微信没有同等开放的客户端API,但在企业微信、飞书自动化场景中,类似思路可参考 wechatpy 或飞书SDK。
4. huey
轻量级定时任务“自动巡航”
你设定好“每隔5分钟检查一次网站状态”,它就像闹钟一样准时执行,不需要你手动触发。
# 环境:Python 3.6+,支持Redis、SQLite等多种存储from huey import RedisHueyimport requestshuey = RedisHuey('my_app')@huey.periodic_task(crontab(minute="*/5"))def ping_site(): r = requests.get("https://example.com") print(f"Pinged site: {r.status_code}")# 需要单独启动 huey consumer 进程# 命令行执行:huey_consumer.py my_app.huey复杂度:适合小规模任务,比Celery轻量得多,但同样支持分布式。
国内替代:如果你在阿里云/腾讯云上,可以直接用 函数计算(FC) + 定时触发器,效果类似但无需自己维护队列。
5. imbox
把邮箱变成数据库
你每天手动下载附件,它帮你自动归类、解析、存盘。
# 环境:Python 3.6+,支持IMAP协议from imbox import Imboxwith Imbox("imap.gmail.com", username="me@gmail.com", password="mypassword", ssl=True) as imbox: for uid, msg in imbox.messages(unread=True): print(msg.subject, msg.sent_from) # 可进一步解析附件、保存到本地应用场景:自动下载发票、提取验证码、监控客服邮件。
⚠️ 注意:国内QQ邮箱、163邮箱需开启“IMAP/SMTP服务”并生成授权码,不能用登录密码直接连接。
6. scdl
SoundCloud自动化下载器
像一个DJ助手,你告诉它“我要这位艺术家的所有作品”,它就去整理成MP3文件。
# 环境:需安装 scdl (pip install scdl)import subprocesssubprocess.run(["scdl", "-l", "https://soundcloud.com/artist/track", "-p", "./downloads"])# 执行后会下载音频到指定目录适用场景:音频数据集构建、个人存档、语音识别预处理。
国内类比:如果你需要批量下载网易云音乐或QQ音乐的试听片段,可参考 NeteaseCloudMusicApi 项目,但版权问题需自行评估。
7. Twint
绕过Twitter API的“挖掘机”
别人排队领号(申请API Key),你直接从后门进去翻数据。
# 环境:Python 3.6+,但注意Twint已不再维护,建议使用其fork: twint-scraperimport twintc = twint.Config()c.Search = "python"c.Limit = 10c.Store_csv = Truec.Output = "tweets.csv"twint.run.Search(c)# 生成tweets.csv,包含10条相关推文复杂度:无API限制,但易被平台风控,需控制频率。
⚠️ 注意:2024年后Twitter/X大幅收紧爬虫,Twint原版已失效。国内类似需求可参考微博爬虫 weibo-scraper 或抖音爬虫,但务必遵守平台规则,仅用于个人学习。
8. Playwright for Python
跨浏览器自动化“三栖特工”
Selenium是普通司机,Playwright是特技车手——还能同时开三辆车(Chromium、Firefox、WebKit)。
# 环境:Python 3.7+,pip install playwright && playwright installfrom playwright.sync_api import sync_playwrightwith sync_playwright() as p: browser = p.firefox.launch(headless=False) # 可见模式调试 page = browser.new_page() page.goto("https://example.com") print(page.title()) browser.close()# 输出:Example Domain扩展思考:Playwright支持录制操作生成代码(playwright codegen),对复杂交互场景极友好。
国内实践:在阿里云、华为云等环境下,可结合无头模式做UI自动化测试,比Selenium稳定且速度快约30%。
9. youtube-search-python
绕过YouTube API的“白嫖搜索”
别人求着Google给API Key,你直接调用这个库像普通人搜索一样获取结果。
# 环境:Python 3.6+from youtubesearchpython import VideosSearchvideos = VideosSearch("python自动化", limit=3)results = videos.result()for video in results['result']: print(video['title'], video['link'])# 输出:三条视频标题和链接应用场景:构建教程推荐机器人、自动化视频采集。
⚠️ 注意:该库无官方API稳定,若用于商业项目建议配合官方YouTube Data API v3,避免因结构变动导致崩溃。
扩展思考
国内互联网自动化“三板斧”
以上库多为国外服务设计,但在国内环境下,有几个本土化思路可以举一反三:
微信生态:itchat(已失效)、wxauto(Windows版)、企业微信API
阿里/腾讯云服务:用函数计算(FC)替代huey,用OSS存储替代本地文件
反爬对抗:国内网站普遍有更严格的风控,建议结合 pyppeteer-stealth 或 playwright-stealth 插件,并配置动态代理池
避坑指南(90%的人会踩)
场景 | 错误做法 | 正确做法 |
|---|---|---|
表单登录 | 硬编码密码 | 使用环境变量或加密配置文件,配合 python-dotenv |
定时任务 | 直接 while True: time.sleep() | 用 huey / celery / 系统 crontab |
邮箱连接 | 直接用邮箱密码 | 开启IMAP/SMTP后使用授权码(国内邮箱)或应用专用密码(Gmail) |
浏览器自动化 | 无头模式直接上生产 | 先在 headless=False 下调试,确认元素选择器稳定 |
爬取社交平台 | 忽略 robots.txt | 遵循协议,控制频率,避免IP被封 |
核心回顾
选对工具:简单表单用MechanicalSoup,复杂交互用Playwright,绕过API用Twint/search库
定时自动化:huey 让你“写完脚本就忘”,邮件和任务调度一把抓
国内落地:环境变量、授权码、函数计算——让代码更健壮,也更符合国内运维习惯
写在最后
技术圈里有个段子:“程序员最讨厌的事,就是自己手动做重复的事。” 这9个库,本质上都是“懒人哲学”的产物——它们让你把时间花在思考业务逻辑上,而不是跟验证码、API限流、浏览器驱动较劲。
但别忘了,自动化是一把双刃剑。你能用它帮同事自动下载发票,别人也可能用它刷流量、盗数据。技术无罪,但使用技术的人要有底线。
你在工作中最想“自动化”但迟迟没动手的场景是什么?是每天整理报表?还是定时监控竞品价格?或者想做一个自动回复的微信机器人?
编辑:于腾凯
校对:邱婷婷
关于我们
数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。
新浪微博:@数据派THU
微信视频号:数据派THU
今日头条:数据派THU
