上周帮朋友调一个爬虫,他跟我吐槽:明明花钱买了付费代理,结果才爬两百多条数据,IP就被网站封得一干二净。
我让他把请求头打印出来一看,当场笑出声——每次请求的 User-Agent 全都是一模一样的:`python-requests/2.25.0`。
这就好比一个间谍,换了十辆不同的车(代理IP),结果每次下车都穿着同一件印着“我是爬虫”的T恤,不抓你抓谁?

User-Agent 说白了,就是你的网络身份证。
你用浏览器打开网页时,它会告诉服务器:“我是 Windows 上的 Chrome 浏览器”;
但你用代码直接发请求,它就老实交代:“我是 Python 脚本”。
网站的反爬系统就像小区保安,看到你是个新IP本来想放行,一瞅你证件上写着“爬虫专用”,当场就把你拦在门外。
所以说,光换代理IP远远不够,你还得学会随机换 User-Agent。
所谓随机切换,就是给每次 HTTP 请求换一身“浏览器皮肤”。
这次是 Chrome,下次是 Firefox,再下次伪装成手机 Safari,怎么像真人怎么来。
这招配合代理IP一起用,相当于你不仅换了车(IP),还每次换衣服(UA),保安根本没法把你和之前的可疑人员挂上钩。
具体怎么实现?Python 里有个超好用的库叫 `fake-useragent`,能自动生成各种真实浏览器标识,代码简单到离谱:
from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent': ua.random}
每次发请求前,重新拿一个随机 UA 就行。
如果是写爬虫框架,更规范的做法是:一边维护代理IP池,一边维护UA池,每次请求各抽一个组合使用。
这里有个细节很多人忽略:有些高防网站不只看 UA,还会核对信息是否合理。
比如你用中文 Windows 的 Chrome,出口IP却是美国乡下的静态IP,地域和语言对不上,很容易触发风控。
更精细的玩法是:UA 和 IP 属地尽量匹配。拿到日本代理就用日语 UA,拿到德国代理就切德语 UA。虽然有点“卷”,但对防护严格的网站确实管用。
另外,切换也不是越频繁越好。正常人不会刷一个页面就换一个浏览器,通常连着用半小时才关。
所以更合理的策略是:每爬 10–20 次换一次 UA,或者遇到封禁、验证码时强制切换。
有人会问:搞这么麻烦真的有必要吗?
看你的目标。只是爬点普通新闻,固定 UA + 免费代理也许够用;但要是爬有商业价值、防护严密的数据,任何一个固定不变的特征,都可能让你暴露。
代理IP解决的是“你在哪”,随机 UA 解决的是“你是谁”。两者搭配,才算给爬虫穿上一套完整的伪装。
说到底,反爬对抗就是不断补短板的过程。千万别让小小的 User-Agent,成为你最薄弱的那一环。
