从考研失败到用爬虫搞定运营需求:一个应届生的技术探索实录
去年三月,我坐在自习室里盯着数学二最后一道大题发呆,脑子一片空白。走出考场那一刻我就知道,研是考不上了。回宿舍收拾东西时,室友还在刷LeetCode准备春招,而我连简历都没写完。但生活总得继续——四月投简历、五月面试、六月入职,现在我已经在深圳南山科技园一家中型互联网公司干了快一年后端开发。
我们团队主要做To B的SaaS工具,客户大多是中小电商。上周五晚上十一点,产品经理小王突然在群里@我:“明天上午十点前能不能把竞品商品价格抓下来?运营老大说双十二要调价,没数据没法开会。” 我心里一万个草泥马奔腾而过,但嘴上只能回个“OK”。
这不是第一次被运营的需求暴击了。刚入职那会儿,我以为写代码就是优雅地实现业务逻辑,结果现实是:70%的时间在处理脏数据,20%在和产品扯需求边界,剩下10%才是在写真正“技术”的东西。不过也正是这些看似琐碎的需求,逼着我去探索各种工具和方案——比如今天要聊的这套技术组合拳:Bolt.new + 爬虫 + Devin 的半自动化实践。
被逼出来的技术选型
最初接到这种爬虫需求时,我的第一反应是手撸 Python + Requests + BeautifulSoup。毕竟大学做课程设计时就这么干过。但很快发现不行:目标网站有反爬,IP频繁被封;而且运营要的数据不是一次性的,他们希望每天自动更新。更头疼的是,有些页面是动态渲染的,静态HTML里根本拿不到关键字段。
我试过 Selenium,但启动浏览器太吃资源,部署到服务器上经常 OOM。后来听隔壁组大佬提到 Puppeteer,性能好一些,可维护性还是差——每次网站结构一变,XPath 全得重写。有次半夜三点收到告警,爬虫挂了,原因居然是对方改了个 CSS class 名,我差点当场去世。
就在快要放弃治疗的时候,团队技术分享会上,有人提到了 Bolt.new。这玩意儿当时刚内测,号称“用自然语言生成可靠爬虫”。我抱着死马当活马医的心态申请了邀请码。
Bolt.new 初体验:真香还是智商税?
简单说,Bolt.new 是个低代码爬虫平台。你不用写一行代码,只要在界面上标注你想抓取的元素,它就能自动生成带容错逻辑的爬虫脚本。最让我心动的是它的智能选择器功能——即使页面结构变化,它也能通过语义分析找到对应内容。
举个例子,我们要抓某宝店铺的商品价格。传统做法是写 div.price.J-p-xxxxx 这种 selector,一旦 class 变了就 GG。而 Bolt.new 会让你框选价格区域,然后它会结合文本内容、位置关系、DOM 层级等特征,生成一个鲁棒性更强的选择策略。
// Bolt.new 自动生成的伪代码(简化版)
const extractPrice = (page) => {
const candidates = page.querySelectorAll('[class*="price"], .sales, .now-price');
for (const el of candidates) {
const text = el.innerText.trim();
if (/¥\d+(\.\d+)?/.test(text)) {
return parseFloat(text.replace(/¥/, ''));
}
}
// fallback: 尝试 OCR 或 API 接口
return tryAlternativeSource();
};
说实话,第一次看到这种逻辑我还挺惊讶的——它居然会主动尝试多种 fallback 方案。更绝的是,它还能自动识别登录态、处理验证码(通过集成第三方打码平台),甚至支持分布式 IP 轮换。
不过 Bolt.new 也不是万能的。有次我们抓一个用了 WebAssembly 加密的网站,它直接罢工了。这时候就得祭出大杀器:Devin。
Devin:当AI开始写爬虫
如果你还没听说过 Devin,简单理解就是 Cognition Labs 推出的“首个真正意义上的 AI 软件工程师”。它不仅能理解需求,还能自己开终端、写代码、跑测试、修 Bug。
我们团队拿到 Devin 内测资格纯属运气好——因为公司 CTO 是他们早期投资人。一开始大家以为就是个高级 Copilot,直到有天运维小哥让它帮忙修一个 Kafka 消费堆积的问题,它居然自己 ssh 上机器、查日志、调参数、重启服务,全程没人工干预。
于是我就想:既然 Devin 能写完整项目,那能不能让它帮我搞定那些 Bolt.new 搞不定的硬骨头?
我给它的 prompt 是这样的:
“我们需要从 https://xxx.com/product?id=123 抓取实时价格。该网站使用 WebAssembly 对价格进行加密,前端 JS 会调用 wasm 函数 decryptPrice(encryptedStr)。请分析网络请求,逆向 wasm 逻辑,并编写一个可持续运行的爬虫服务。”
十分钟后,Devin 给我返回了一个完整的 GitHub repo,包含:
- 使用 pywasm 加载 wasm 文件并模拟 decryptPrice 调用
- 基于 Playwright 的无头浏览器自动获取 encryptedStr
- FastAPI 封装的 REST 接口
- Dockerfile 和 Kubernetes 部署配置
最离谱的是,它还在 README 里写了压测报告和成本估算:“单实例每秒可处理 8~12 个请求,建议搭配 Redis 缓存避免重复抓取。”
我当时惊了——这哪是工具,简直是赛博同事!虽然最后因为合规问题没直接上线(公司对第三方 AI 生成代码有审计要求),但它提供的思路让我们三天内就复现了核心逻辑。
和运营打交道:技术之外的战场
但光有技术还不够。运营同学的需求往往模糊又紧急。有次他们说“抓一下竞品的爆款”,我问“爆款怎么定义?”,对方回“就是卖得好的呀”。我……
后来我们搞了个标准化流程:
- 需求模板:运营必须填清楚 URL 规则、字段定义、更新频率、数据用途
- 沙箱预览:用 Bolt.new 生成 demo 数据,让运营确认格式
- SLA 承诺:明确告知成功率(比如“正常情况95%,大促期间可能降到80%”)
还做了个内部小工具,叫 “爬虫看板”,用 Grafana 展示各任务的执行状态、失败率、数据量。运营老大现在每天早上第一件事就是看这个面板,再也不半夜微信轰炸我了。
下面是我们目前主力爬虫任务的一些指标对比:
| 方案 | 开发耗时 | 日均成功率 | 维护成本 | 适用场景 |
|---|---|---|---|---|
| 手写 Requests | 2人日 | 65% | 高(需频繁调整) | 静态页面、无反爬 |
| Puppeteer 脚本 | 3人日 | 82% | 中 | 动态渲染、简单交互 |
| Bolt.new | 0.5人日 | 91% | 低(自动容错) | 大多数常规场景 |
| Devin 辅助定制 | 1.5人日 | 95%+ | 中(需人工审核) | 强反爬、加密、复杂逻辑 |
可以看到,Bolt.new 在性价比上碾压传统方案。而 Devin 虽然强大,但受限于公司安全策略,目前只用于攻坚场景。
那些踩过的坑:血泪教训
当然,这一路也不是一帆风顺。分享几个让我彻夜难眠的事故:
坑1:IP 被封导致服务雪崩
有次为了赶进度,我把爬虫部署在公司主网段 IP 上。结果对方风控系统直接把整个 C 段拉黑,连带影响了客户登录接口。运维差点把我挂墙上。教训:爬虫流量必须走独立出口,最好用代理池隔离。
坑2:忽略 robots.txt 引发法律风险
某次抓一个垂直电商,没注意对方 robots.txt 明确禁止爬取商品页。虽然技术上能绕过,但法务收到律师函后紧急下线。教训:再急的需求也得先看合规条款,尤其是 To B 业务。
坑3:数据存储设计失误
最初直接把原始 HTML 存进 MongoDB,结果三个月后磁盘爆了。后来改成只存结构化字段 + 原始 URL 快照,并加上 TTL 索引自动清理。教训:爬虫不是终点,数据生命周期管理同样重要。
为什么我越来越重视代码可读性?
说到这里,不得不提我的一个执念:代码必须让人一眼看懂。可能是因为考研复习时被晦涩的数学证明折磨怕了,现在写代码我特别反感“聪明但难懂”的写法。
比如爬虫里的重试逻辑,有人喜欢写成嵌套的 try-catch:
try:
data = fetch(url)
except NetworkError:
try:
time.sleep(2)
data = fetch(url)
except NetworkError:
# ... 更多嵌套
我宁愿拆成清晰的函数:
def robust_fetch(url, max_retries=3):
"""带退避重试的抓取函数"""
for attempt in range(max_retries):
try:
return fetch(url)
except NetworkError as e:
if attempt == max_retries - 1:
raise e
wait_time = 2 ** attempt # 指数退避
logger.warning(f"Retry {attempt+1}/{max_retries} after {wait_time}s")
time.sleep(wait_time)
在深圳这种节奏飞快的城市,代码很可能明天就被另一个同事接手。可维护性不是加分项,而是生存必需品。我们团队甚至规定:所有爬虫脚本必须包含注释说明“此网站的反爬特征”和“上次失效时间”。
结语:失败后的另一种成长
回头看,考研失败或许是我职业生涯的转折点。如果当时上岸了,现在可能还在实验室调参,而不是在深圳这座“卷都”里实战打磨技术。
这一年,我从一个只会背八股文的学生,变成了能用 Bolt.new 快速响应运营需求、用 Devin 攻坚技术难题的工程师。过程中有过崩溃,有过自嘲(比如自封“首席爬虫官”),但更多的是解决问题后的成就感。
技术探索从来不是炫技,而是用合适的工具,在有限条件下交付价值。无论是 Bolt.new 的低代码效率,还是 Devin 的 AI 辅助,最终都要服务于业务目标。而作为开发者,我们的价值不仅在于写出多酷的代码,更在于能否成为业务和数据之间的可靠桥梁。
对了,上周那个双十二价格爬虫,凌晨三点跑通了。早上九点运营群里一片“牛逼”,我喝了杯瑞幸,默默把代码提交到 GitLab——这次加了完善的日志和告警,应该能撑过整个大促周期吧。
(完)
后记:本文所有技术方案均已脱敏,公司名、网址、具体数据均为虚构。但情绪真实,头发确实少了。

评论 0