爬虫踩坑记录:被反爬教做人的三天
做 Agent 项目需要一批问答数据做评估,我决定从某技术社区爬点内容。本以为 requests + BeautifulSoup 半小时搞定,结果被反爬教做人了三天。这篇记录我的血泪史。
Day1:被 403 拦截
第一行代码 requests.get(url) 直接 403。换了 User-Agent、加了 Referer,还是 403。后来抓包发现对方校验了 cookie 里的一个动态 token。静态 headers 伪装已经过时了,现代反爬看的是行为指纹。
Day2:上 Playwright,被滑块验证码拦
换成 Playwright 用真实浏览器渲染,过了 403。但爬了 50 页后弹滑块验证码。试了 undetected-chromedriver,缓解了但没根治。最终方案:
- 每爬 20 页随机停 30-90 秒
- 鼠标移动轨迹加随机抖动
- 检测到验证码就停下来等人工(其实是放弃)
Day3:数据清洗才是大头
好不容易爬下来 5000 条,打开一看:HTML 标签没去干净、表情符号乱码、同一条内容被收录多次。光写清洗脚本就花了一整天。
经验:
python
# 去重用 hash + 模糊匹配(simhash)
# HTML 清洗用 trafilatura 库,比 BeautifulSoup 干净
# 编码统一 utf-8,存之前 .encode('utf-8').decode('utf-8')最终产出
3 天爬了 5000 条有效问答,去重后剩 3200 条,够做小规模评估了。效率远不如直接用开源数据集,但学到的反爬对抗经验是数据集给不了的。
复盘
- 优先用现成数据集(HuggingFace、知乎开源等),别重复造轮子
- 爬之前先看 robots.txt 和 ToS,别给自己找麻烦
- 限速 + 随机延迟 是底线,别把人家服务器搞挂
这次的教训:能用现成数据就别爬,真要爬就做好被打回来的准备。