截至2026年10月7日,Shifter拥有规模最大的美国实时IP池,超过Oxylabs和Bright Data,而成本只是其一小部分。Shifter 现在拥有数量最多的美国活跃 IP 资源池

查看基准测试

住宅代理

当你不需要住宅代理时

我们通过数据中心IP和住宅出口分别抓取了30个公开网站。超过一半的网站根本不需要代理。如何判断你面对的是哪种网站。

James Meadow

2026年10月9日 · 4 分钟阅读

住宅代理是我们销售的产品,所以由我们来写什么时候不需要住宅代理似乎有点奇怪。但是为每个任务都购买代理的团队会超支,而把每次失败都归咎于代理的团队会浪费数周时间。知道哪些网站需要住宅IP、哪些完全不需要代理、哪些需要别的东西,是网络数据采集中成本最低的优化。

为了把这一点说清楚,我们做了一个小测试。2026年10月9日,我们从一台使用数据中心IP地址的云服务器请求了30个公开页面,每个页面请求三次,然后又通过Shifter的美国出口住宅代理再做一遍。两轮测试都使用了相同的简单Python HTTP客户端。30个页面中有16个每次都能从数据中心IP成功获取。3个只有通过住宅出口才能成功。其余11个在两种方式下都失败了,原因并不是住宅IP能解决的。

测试内容

目标涵盖六类网站:公共API和开放数据、参考和文档网站、新闻主页、电商搜索页面、旅行搜索页面,以及一组社交、招聘和搜索页面。每个请求使用相同的桌面浏览器User-Agent,并检查真实内容,而不仅仅是状态码:只有当响应中包含仅出现在实际内容中的标志(例如搜索结果卡片)时,才算作成功。因此,返回状态码200的拦截页面(这种情况很常见)会被算作失败。

我们在最终测试前,先检查了两种网络下保存的响应来选定标志,并剔除了5个候选页面,因为我们无法区分真实内容与登录墙或空的JavaScript外壳。

类别网站数据中心IP住宅出口结论
公共API和开放数据en.wikipedia.org3次中3次3次中3次不需要代理
公共API和开放数据api.github.com3次中3次3次中3次不需要代理
公共API和开放数据data.sec.gov3次中3次3次中3次不需要代理
公共API和开放数据api.worldbank.org3次中3次3次中3次不需要代理
公共API和开放数据ecb.europa.eu3次中3次3次中3次不需要代理
参考和文档docs.python.org3次中3次3次中3次不需要代理
参考和文档developer.mozilla.org3次中3次3次中3次不需要代理
参考和文档rfc-editor.org3次中3次3次中3次不需要代理
参考和文档en.wikipedia.org3次中3次3次中3次不需要代理
参考和文档arxiv.org3次中3次3次中3次不需要代理
参考和文档stackoverflow.com0次中3次0次中3次两种方式都被拦截
新闻bbc.com3次中3次3次中3次不需要代理
新闻reuters.com0次中3次0次中3次两种方式都被拦截
新闻nytimes.com0次中3次0次中3次两种方式都被拦截
新闻theguardian.com3次中3次3次中3次不需要代理
新闻edition.cnn.com3次中3次3次中3次不需要代理
新闻bloomberg.com0次中3次0次中3次两种方式都被拦截
电商搜索amazon.com3次中3次2次中3次不需要代理
电商搜索walmart.com0次中3次3次中3次需要住宅IP
电商搜索ebay.com0次中3次0次中3次两种方式都被拦截
电商搜索bestbuy.com0次中3次0次中3次两种方式都超时
电商搜索etsy.com0次中3次0次中3次两种方式都被拦截
旅行booking.com0次中3次2次中3次需要住宅IP
旅行expedia.com0次中3次0次中3次两种方式都被拦截
旅行airbnb.com3次中3次2次中3次不需要代理
旅行tripadvisor.com0次中3次0次中3次两种方式都被拦截
旅行kayak.com0次中3次3次中3次需要住宅IP
社交、招聘和搜索linkedin.com3次中3次3次中3次不需要代理
社交、招聘和搜索indeed.com0次中3次0次中3次两种方式都被拦截
社交、招聘和搜索google.com0次中3次0次中3次需要浏览器

“两种方式都被拦截”指的是普通HTTP客户端在两种网络下都被拦截。真实浏览器或能处理浏览器检查的抓取API很可能在这些网站上成功;这次测试没有尝试。

测试结果说明了什么

公共API、开放数据和文档网站不需要代理。 除一个外,我们尝试的每个API和参考页面在每次尝试中都能从数据中心IP成功获取内容。这些服务本就是为程序调用而设计的。它们想要的是描述性的User-Agent、合理的请求速率,对某些服务而言还需要API密钥。代理只会增加成本,没有别的作用。

许多大型网站根本不拦截数据中心IP。 六个新闻主页中有三个、Amazon搜索、Airbnb搜索和一个LinkedIn公司页面,向云服务器提供了真实内容,三次中三次都成功。对于这类网站的低流量采集,不用代理也是合理的,只要你遵守网站的服务条款和速率限制。

有些网站按IP信誉拦截,这正是住宅出口发挥作用的地方。 Walmart、Kayak和Booking.com每次都拒绝了数据中心IP,但通过住宅出口提供了内容。这些网站会对请求来源的网络打分,而云服务器的地址得分很差。这正是住宅代理存在的理由。

有些网站拦截的是客户端,而不是IP。 eBay、Etsy、Expedia、Tripadvisor、Indeed、Stack Overflow和三个新闻网站在两种网络下都拦截了普通的Python客户端。它们在查看请求来源之前,会先检查客户端如何连接和表现,比如其TLS指纹、HTTP标头以及是否运行JavaScript。住宅IP修复不了一个暴露自己是脚本的客户端。我们关于TLS和HTTP/2指纹识别的指南解释了这些检查的原理。

有些页面无论网络如何都需要浏览器。 Google搜索向两种网络都返回了要求启用JavaScript的页面,HTML中没有结果。对于这类页面,选择在于无头浏览器和能直接返回数据的API之间。

如何判断一个网站需要什么

你可以在花钱之前,用一个下午把大多数目标分到这几组里。下面这个函数就是我们测试中使用的检查方法:它获取一个页面,并判断你得到的是真实内容、拦截、错误还是空壳。

import re

import requests

BLOCK = re.compile(r"captcha|access denied|are you a robot|just a moment|unusual traffic|"
                   r"verify you are human|request blocked|pardon our interruption|enable javascript and cookies",
                   re.IGNORECASE)
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
}


def check(url, marker, proxies=None):
    """Did this request get the real content, or a block, an error or an empty shell?"""
    try:
        response = requests.get(url, headers=HEADERS, proxies=proxies, timeout=30)
    except requests.RequestException as error:
        return {"url": url, "result": "error", "detail": type(error).__name__}
    body = response.text
    if response.status_code != 200:
        result = "blocked" if response.status_code in (202, 401, 403, 429, 503) else "error"
    elif BLOCK.search(body[:20000]) and marker.lower() not in body.lower():
        result = "blocked"
    elif marker.lower() not in body.lower():
        result = "no content"
    else:
        result = "ok"
    return {"url": url, "result": result, "status": response.status_code, "bytes": len(response.content)}

选择一个只出现在你想要的内容中的标志,比如结果卡片的类名,或者JSON响应中的某个字段名。不要使用页面标题中的词语:拦截页面和登录墙经常会重复标题。然后在每个目标的几个页面上运行它:

from check import check

print(check("https://api.github.com/repos/python/cpython", '"full_name"'))
print(check("https://www.ebay.com/sch/i.html?_nkw=laptop", "srp-results"))
{'url': 'https://api.github.com/repos/python/cpython', 'result': 'ok', 'status': 200, 'bytes': 6617}
{'url': 'https://www.ebay.com/sch/i.html?_nkw=laptop', 'result': 'blocked', 'status': 403, 'bytes': 1832}

在你的爬虫实际运行的地方(如果生产环境在云服务器上,就不要在笔记本电脑上)运行它,在一天内多跑几次。结果可以对应到一个决策:

从云服务器看到的情况通常意味着什么应该使用什么
一直能获取真实内容该网站在你的流量水平下不拦截数据中心流量不用代理,或使用数据中心IP以扩大规模
被拦截或遇到验证,而家庭网络能获取真实内容该网站按IP信誉拦截住宅代理
在所有网络下都被拦截该网站在检查客户端真实浏览器或抓取API,底层通常配合住宅IP
空壳页面,没有数据内容由JavaScript渲染无头浏览器,或页面调用的API
登录墙内容不是公开的未经许可不要采集

两点补充说明:

  • 流量规模会改变答案。 一个忽略云服务器十次请求的网站,可能会拦截一万次请求。请按你计划的运行速率重新测试,而不只是测一次。
  • 位置会改变答案。 网站会根据国家提供不同的内容并应用不同的规则。如果你需要从德国视角看到的数据,就从德国进行测试。

中间选项

选择并不只在不用代理和住宅代理之间。

  • 数据中心IP便宜又快,对于不拦截它们的网站来说很合适。我们关于ISP代理和数据中心代理的对比文章讲解了什么时候它们就够用了。
  • ISP代理是注册在消费者互联网服务商名下的静态地址。它们适合长会话以及登录你自己的账户,这种场景你希望几天内用同一个IP。Shifter的ISP代理提供无限流量,因此也适合在接受它们的网站上进行繁重、稳定的工作负载。
  • 抓取API替你处理浏览器、重试和IP选择,按成功页面计费而不是按流量计费。对于会检查客户端的网站来说,这通常是最便宜的选项,因为你不用自己搭建和维护浏览器层。参见我们关于抓取JavaScript密集型网站的指南。
  • 住宅代理是在网站判断请求来源网络时正确的工具:当同一个客户端从家庭网络能成功、从云服务器却失败的时候。

常见问题

我做网页抓取需要代理吗?

不一定。在我们的测试中,30个公开页面中有16个,包括每一个公共API和大多数文档网站,在没有代理的情况下向云服务器提供了真实内容。先从爬虫实际运行的地方测试你的目标。

什么时候需要住宅代理?

当一个网站拦截来自数据中心IP的请求,却向同一个客户端从家庭网络发来的请求提供内容时。在我们的测试中,30个网站中有3个(Walmart、Kayak和Booking.com)表现出这种情况。

为什么用了住宅代理还是被拦截?

通常是因为网站在检查客户端,而不是IP。许多网站会拦截那些TLS指纹、标头或缺少JavaScript而暴露出是脚本的HTTP客户端。我们测试中30个页面里有11个在两种网络下、使用普通Python客户端时都失败了。解决办法是真实浏览器或抓取API,而不是换一个IP。

数据中心代理对抓取来说够用吗?

对于公共API、文档、许多新闻网站和一些大型零售商来说,在中等流量下是够用的。对于按IP信誉打分的网站来说,不够用。要逐个测试目标,而不是想当然。

结论

住宅代理解决的是一个特定问题:网站根据请求来源的网络来判断请求。它对会检查客户端的网站没有帮助,对于公共API和不拦截云端流量的网站来说也没有必要。从你的爬虫实际运行的地方测试每个目标,把它归入上述某一类,只在能改变结果的地方为住宅流量付费。我们的网页抓取最佳实践涵盖了负责任采集的其余内容。

准备好开始了吗?

试用 Shifter 住宅代理,205M+ 个 IP,195+ 个国家,低至 $0.10/GB。

立即开始