9 个自动化互联网的 Python 库,最后一个太离谱
接口 200,不代表页面真能用。 爬虫跑完,也不代表数据是对的。 我见过最坑的一次,是脚本每天凌晨抓页面,日志全绿,结果抓了三天登录页。
这种活,别一上来就 Selenium。能 HTTP 解决的,别开浏览器;能解析 HTML 的,别截图识别;真遇到反爬、登录、动态渲染,再把浏览器请出来。
第一个还是 requests。
它不花哨,但够硬。内部后台、老接口、简单表单提交,用它最省事。
import requestss = requests.Session()
s.headers.update({
"User-Agent": "ops-checker/1.0",
"X-Trace-From": "night-job"
})
resp = s.get("https://example.com/api/status", timeout=5)
resp.raise_for_status()
data = resp.json()
if data.get("state") != "ok":
raise RuntimeError(f"状态不对: {data}")
我一般拿它写巡检脚本。别小看 timeout,线上脚本最怕的不是失败,是卡死。卡在那里不报错,第二天你看日志还以为没事。
第二个是 httpx。
它像 requests 的升级版,支持同步,也支持异步。做批量探测、批量校验链接时,比 requests 顺手。
import httpxurls = [
"https://example.com",
"https://example.com/login",
"https://example.com/help"
]
with httpx.Client(timeout=6, follow_redirects=True) as client:
for url in urls:
r = client.get(url)
print(url, r.status_code, len(r.text))
这里我会多看一个 len(r.text)。有些页面状态码是 200,但内容只有几百字节,八成是被网关、登录页、错误模板吞了。
第三个是 aiohttp。
批量请求上千个页面时,它比一条条同步请求舒服很多。但也别乱开并发,目标站不是你家 Redis,打太猛容易被封。
import asyncio
import aiohttpasyncdeffetch(session, url):
try:
asyncwith session.get(url, timeout=8) as r:
text = await r.text()
return url, r.status, len(text)
except Exception as e:
return url, "ERR", str(e)
asyncdefmain():
urls = [f"https://example.com/item/{i}"for i in range(1, 50)]
conn = aiohttp.TCPConnector(limit=10)
asyncwith aiohttp.ClientSession(connector=conn) as session:
for row inawait asyncio.gather(*(fetch(session, u) for u in urls)):
print(row)
asyncio.run(main())
limit=10 是我会保留的东西。不是所有自动化都要追求快,能稳定跑完更值钱。
第四个是 BeautifulSoup。
页面结构不复杂时,直接用它扒字段。别一看到 HTML 就上正则,正则解析 HTML,后面维护的人会骂你。
from bs4 import BeautifulSouphtml = open("page.html", encoding="utf-8").read()
soup = BeautifulSoup(html, "html.parser")
title = soup.select_one("h1")
price = soup.select_one(".price")
print({
"title": title.get_text(strip=True) if title else"",
"price": price.get_text(strip=True) if price else""
})
我写这种脚本,宁愿字段取不到就空着,也不喜欢一堆链式调用直接炸。自动化脚本跑半夜,别指望有人盯着屏幕救它。
第五个是 parsel。
它用 CSS 和 XPath 取数据,写爬虫时比 BeautifulSoup 更利落,尤其页面层级深的时候。
from parsel import Selectorsel = Selector(text=open("list.html", encoding="utf-8").read())
for item in sel.css(".goods-card"):
name = item.css(".name::text").get(default="").strip()
href = item.css("a::attr(href)").get()
print(name, href)
XPath 不是过时,它只是丑。但有些页面,CSS 选择器绕半天,XPath 一刀就切到了。
第六个是 Scrapy。
这玩意适合正式一点的数据采集任务。队列、去重、失败重试、下载中间件,它都给你铺好了。缺点也明显,项目结构一上来有点重。
我一般不会拿 Scrapy 写一次性脚本。一次性的,用 httpx 就完事。要长期跑、要扩展、要断点、要限速,再用 Scrapy。
第七个是 Playwright。
动态页面、前端渲染、按钮点击、登录态,Playwright 比 Selenium 新一些,也更顺手。
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://example.com/login", wait_until="networkidle")
page.fill("#username", "robot")
page.fill("#password", "not-real-password")
page.click("button[type=submit]")
page.wait_for_selector(".dashboard")
print(page.title())
browser.close()
这里别迷信 sleep。能等选择器就等选择器,能等网络空闲就等网络空闲。time.sleep(3) 是脚本偶发失败的老熟人。
第八个是 Selenium。
它老,但很多公司内网系统、老后台、IE 时代迁过来的东西,还真得靠它。别嫌弃,能干活就行。
我对 Selenium 的态度很简单:能不用就不用,必须用就把等待、截图、失败日志补上。不然它失败的时候,只给你一个元素找不到,现场根本没法复盘。
第九个,browser-use,这个就有点离谱了。
前面这些库,是你告诉 Python 怎么点、怎么抓、怎么解析。它不一样,它是把浏览器交给大模型,让它自己看页面、自己点按钮、自己完成任务。
大概是这种感觉:
from browser_use import Agent
from langchain_openai import ChatOpenAI
import asyncioasyncdefrun():
agent = Agent(
task="打开示例网站,找到帮助中心里和退款相关的页面,整理标题",
llm=ChatOpenAI(model="gpt-4o-mini")
)
result = await agent.run()
print(result)
asyncio.run(run())
这东西我不会直接丢生产。太不可控,页面一变、弹窗一出、模型一抽风,结果就可能跑偏。
但拿它做后台操作原型、低频人工流程替代、测试一些重复页面动作,确实有点东西。以前写半天定位器,现在一句话让它自己点。离谱归离谱,方向是真的变了。
自动化互联网这事,别被库带着跑。
简单接口用 requests。 批量探测用 httpx 或 aiohttp。 静态页面用 BeautifulSoup、parsel。 正式采集上 Scrapy。 动态页面再上 Playwright、Selenium。 最后那个 AI 控浏览器,先放实验田里,别急着往生产扔。