嘿,你试过在网上找点数据,结果刚爬了两页IP就被封了是吧?别问我怎么知道的,大家都是这么过来的。这时候你就需要了解一下代理IP这东西了——不是那种要花钱的企业级方案,而是随手就能用上的免费资源。别指望它能扛住大规模商业爬虫,但偶尔抓个数据、绕过个地域限制或者匿名浏览一下,还是相当靠谱的。
先泼一盆冷水:免费的代理IP大多数不稳定,速度也一般,有些甚至活不过十分钟。但如果你只是偶尔用用,或者想先试试水,它们真是再合适不过了。我一般会去一些专门发布免费代理的网站,比如“西刺代理”、“快代理”或者“站大爷”,这些站每天会更新一批能用IP,格式一般是IP:端口,还标注了类型是HTTP还是HTTPS、位置在哪儿、响应速度怎么样。
拿到IP之后怎么用?最简单的方式就是手动设置浏览器。以Chrome为例,在设置里搜“代理”,选择“打开您计算机的代理设置”,接着进入手动设置,填上IP和端口,保存就行了。这时候你再打开whatismyip.com,就会发现IP地址变了——不过这种方法只适合浏览网页,不适合写代码抓数据。
如果你要用Python做爬虫,requests库加代理简直不要太方便。代码大概长这样:
import requests
proxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.10:1080",
}
response = requests.get("http://example.com", proxies=proxies)
print(response.text)
当然,你得先把那个10.10.1.10:3128
换成真实可用的代理IP。但问题来了,免费代理IP失效太快了,总不能每次都手动换吧?所以最好整个IP池,写个脚本自动验证哪些还能用。思路也不难:先爬一批代理,接着逐个发请求测试,能通的就留下来备用。
说到验证,很多人喜欢用百度或者谷歌来测试,但其实没必要——发个HEAD请求到任何一个稳定网站都行,设置个超时时间,比如2秒,如果没返回就扔掉。毕竟速度太慢的代理用了也是受罪。
有时候你会发现,明明验证时还能用的IP,真正抓数据时却失败了。这很可能是因为目标网站有反爬机制,识别出这个是公共代理接着封了。所以别指望一个IP走天下,多备几个轮着用才是正解。
哦对了,除了HTTP代理,还有SOCKS代理,比如SOCKS4、SOCKS5。后者支持认证和UDP,更灵活一些。在Python里用的话需要安装socks
库,代码稍微变一点:
proxies = {
'http': 'socks5://user:pass@host:port',
'https': 'socks5://user:pass@host:port'
}
但说实话,免费SOCKS代理比HTTP的还少,稳定性也更看缘分。
除了手动找IP,你也可以用现成的免费代理API,比如有个叫“proxy-list”的项目就在GitHub上开源了接口,直接请求就能拿到最新的一批IP。还有些提供代理池的服务,允许你通过一个固定地址动态获取代理,虽然免费版有限制,但对轻量用户来说足够了。
不过要注意,用免费代理是有风险的。有些代理会记录你的流量,甚至插入广告或恶意代码。所以千万别用它登录银行账号或者传敏感数据—— anonymity并不等于security,这是两码事。最好配合HTTPS一起使用,至少数据在传输过程中是加密的。
如果你需要频繁切换代理,可以考虑用浏览器插件,比如SwitchyOmega(Chrome)或FoxyProxy(Firefox)。这些工具可以预设多个代理配置,一键切换,比每次都去系统设置里方便多了。你甚至可以设置规则,让特定网站自动走代理,其他的直连。
有时候你可能会遇到一种情况:代理IP明明是通的,但访问某些网站却返回403。这很可能是因为这个IP被太多人用过,已经被目标网站拉黑了。这时候只能换一个——没别的办法,毕竟免费的就是这样。
还有一种玩法是使用Tor网络做代理,默认本地端口是9050(SOCKS)或8118(HTTP)。配合Python的话可以直接连本地端口,实现流量匿名化。不过Tor速度比较慢,只适合对速度要求不高的场景。
末尾提醒一句,虽然代理能隐藏你的真实IP,但浏览器指纹、时区、字体这些还是可能暴露你。如果真的追求匿名,最好配合Tor浏览器或者虚拟机一起使用。不过如果你只是想抓点公开数据,倒不用搞得这么复杂。
好了,差不多就这些。免费代理就像路边摊——不知道干不干净,但饿的时候能顶饱。真要搞大规模、高频率抓取,还是得上付费方案。但对于偶尔用用的用户来说,学会这几招已经能解决八成问题了。