先把"定位"这件事拆开

国内短效代理的选地区参数通常有三个层级:大区、省份、城市,部分供应商还支持运营商筛选。三者对成功率的影响并不是线性叠加的,理解它们的差别,能省下不少无效成本。

省份级定位解决的是"跨区"问题

不传地区时,提取链路会从全国池里随机给 IP,你可能在北京调用、被分配到广东的出口。对于本地生活、政务查询、区域价格类目标站,跨省会直接导致两种后果:一是内容返回的是异地数据,采集结果无效;二是登录态、地域校验会触发额外验证。

把地区限定到目标所在省份,是投入产出比最高的一步,几乎零成本,通常能解决大部分"数据不对"的问题。

城市级定位解决的是"同省不同城"的细节问题

城市级定位有用的场景集中在三类:

  • 本地服务类站点:商家列表、门店库存、本地房源,城市参数决定返回内容,省份级不够用。
  • 广告与投放验证:需要确认某城市用户看到的落地页、活动价是否正确,出口必须落在那座城市。
  • 延迟敏感任务:目标服务器在某个机房,出口离得越近,握手与传输耗时越低,城市级能明显压低平均响应时间。

反过来,如果你的目标是全国性内容站、公开数据接口、搜索引擎结果页,城市级定位基本没有额外收益,反而会收窄可用池、拉低换 IP 效率。这时候用省份级甚至大区级,成功率会更高。

运营商筛选要谨慎开

运营商筛选适合做"同运营商链路"的兼容性验证,例如某些服务对特定运营商的回源策略不同。但一旦同时限定省份、城市和运营商,可用池会被切成很小的一块,短效 IP 的轮换优势就被抵消了。实践中建议:先确定地区,再观察失败日志,确实出现运营商相关报错时才加这一层,且不与城市级同时使用。

怎么验证定位真的生效

不要只看提取接口返回的地区字段,那是供应商侧标注,最终以出口实际 IP 的归属为准。用一条回显接口做交叉验证:

import requests

r = requests.get("https://www.youhuip.com/api/v1/ip/echo",
                 proxies={"http": proxy, "https": proxy}, timeout=10)
info = r.json()
print(info.get("ip"), info.get("province"), info.get("city"), info.get("isp"))

抽 20 条样本看命中率。正常情况命中率应在九成以上;如果明显偏低,先确认参数名与取值是否正确(多数供应商要求传中文省份名或标准行政区划编码,传拼音会静默退化成全国随机),再确认套餐是否支持城市级——不少入门套餐只开到省份粒度。

一个常见误解:定位越精确越"专业"。实际恰恰相反,定位精度与可用池大小是此消彼长的关系。正确顺序是先确认目标站是否真的按地区返回内容,再决定精确到哪一层。

小结

省份级是默认该开的,城市级只在目标内容或网络链路真的依赖城市时才有价值,运营商筛选则属于排障手段而非常规配置。把这三层当成三个独立开关按需使用,比一律拉满更划算。