为什么网站禁止 IP(以及首先要修复什么)
大多数封锁是由你请求的方式触发的,而不是你是谁。
三个信号在大多数禁令背后发挥着重要作用:
- 速率&流量 — 来自一个IP的请求每秒过多,或者是人类无法产生的完全均匀的节奏。
- 指纹 — TLS/JA3,HTTP/2帧顺序,以及与您声称的浏览器不匹配的头部顺序。
- 头部 — 缺失或默认的
用户代理,没有接受语言,过时或缺失的引用来源。
在优化任何内容之前,请阅读目标的robots.txt和服务条款。抓取公共数据通常是可以的;但猛击一个端点,忽视发布的速率限制,或收集个人数据可能会违反服务条款,并在某些司法管辖区违反法律。遵守爬虫延迟,缓存您获取的内容,不要反复请求一个站点。
一旦您负责任地抓取,您的主要杠杆是IP的分配方式:
| 方法 | 最佳适用于 | 权衡 |
|---|---|---|
| 轮换(每个请求/批次的新IP) | 高流量公共页面,搜索风格的爬虫 | 分散负载,但会破坏会话、购物车和登录 |
| 粘性/会话(一段时间内相同的IP) | 登录流程、多步骤导航、分页 | 看起来像人类,但将负载集中在一个出口上 |
s4m运行数据中心代理 — 经过身份验证的SOCKS5 + HTTP,而不是住宅代理。它们每GB速度快且便宜,但一些消费者网站更容易标记数据中心范围,因此请将它们与干净的头部和诚实的速率限制配对。需要一个稳定的出口用于登录?添加一个专用IP。更喜欢完整的隧道?请参见/vpn/,在/compare/权衡选项,或阅读更多指南。
让您不被封禁的杠杆
将这些结合起来——没有单一的技巧能胜过良好的反机器人系统。
速率限制和抖动
限制并发,添加请求之间的随机延迟,并遵守爬虫延迟以及服务器发送的任何429 / Retry-After。
轮换或保持粘性
为无状态、高流量的爬虫轮换IP;为登录的多步骤流程保持一个固定出口。许多工作混合了两者。
干净的指纹
发送真实的浏览器头部,使用一致的Accept-Language和Referer,而不是将您标记为机器人的库默认值。
在失败时退后
在429和5xx响应上使用指数退避和抖动,当网站明确发出停止信号时完全停止。
每个IP的使用控制
s4m限制可以按IP、账户和账户类型进行管理员调节,因此一个失控的任务无法烧毁共享出口或你的预算。
无日志,优先使用 RAM
通过TLS认证的代理,设计上无日志。您的目标列表和流量保持属于您,无论是卡支付还是加密货币。
抗封禁的抓取设置
从第一次请求到持久爬虫的六个步骤。
检查robots.txt和服务条款
确认端点允许自动访问,注意任何爬虫延迟,并跳过个人或明显禁止的数据。
设置请求预算
选择一个并发上限和一个远低于看起来滥用的目标每秒请求数,然后添加随机延迟。
发送真实的头部
设置一个真实的User-Agent、Accept和Accept-Language,并在会话期间保持一致。
选择旋转与固定
为无状态页面轮换出口;在登录会话中重用一个粘性出口,以便状态不会在流程中断裂。
添加指数退避
在 429 / 503 时,等待 Retry-After(或 2^n)加上抖动,然后重试几次,再优雅地放弃。
每个IP的使用限制
使用 s4m 每 IP 限制,以便单次抓取无法耗尽出口,并在扩展时监控按量使用。
Python:通过s4m代理的礼貌爬虫
粘性会话,真实的头部,带抖动的退避。用您的凭据替换USER:PASS——绝不要硬编码真实IP。
import random
import time
import requests
# s4m datacenter proxies (authenticated). Placeholder host only.
USER, PASS = "USER", "PASS"
HTTP = f"http://{USER}:{PASS}@proxy.s4m.online:3128"
SOCKS = f"socks5://{USER}:{PASS}@proxy.s4m.online:1080" # pip install requests[socks]
PROXIES = {"http": HTTP, "https": HTTP}
HEADERS = {
"User-Agent": (
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/125.0 Safari/537.36"
),
"Accept": "text/html,application/xhtml+xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
}
def polite_get(url, session, max_retries=5):
for attempt in range(max_retries):
r = session.get(url, headers=HEADERS, proxies=PROXIES, timeout=20)
if r.status_code == 429 or r.status_code >= 500:
wait = float(r.headers.get("Retry-After", 2 ** attempt))
time.sleep(wait + random.uniform(0, 1)) # backoff + jitter
continue
r.raise_for_status()
return r
raise RuntimeError(f"gave up after {max_retries} tries: {url}")
def crawl(urls):
# One Session = one sticky exit for this run; open a new one to rotate.
with requests.Session() as s:
for url in urls:
resp = polite_get(url, s)
yield url, resp.text
time.sleep(random.uniform(1.5, 4.0)) # rate-limit + jitter
if __name__ == "__main__":
for url, html in crawl(["https://example.com/page/1"]):
print(url, len(html))问题,已解答
数据中心代理足够避免封禁吗?
它们隐藏您的原始 IP 并分散负载,这可以防止许多基于速率的阻止。但 s4m 代理是数据中心的,而不是住宅的,一些消费者网站更容易标记数据中心范围——因此将它们与干净的头部、合理的速率限制和在状态重要的地方使用粘性会话结合起来。
我应该使用轮换代理还是粘性代理?
为无状态、高流量的公共页面轮换出口,以便没有单个IP引起注意。当你登录或进行多步骤流程时保持稳定会话,因为在会话中更改IP看起来可疑,可能会破坏购物车或身份验证。许多作业混合使用两者。
网络爬虫合法吗?
这取决于您的管辖权、数据和网站的条款。公共的非个人数据通常是可以的,但平台的服务条款可能禁止自动访问,即使在技术上是可能的,个人数据则有额外的规则。始终检查 robots.txt 和服务条款,并谨慎抓取。
我如何阻止一个任务消耗我所有的配额?
s4m 代理是计量的,按需付费,每个 IP、每个账户和每种账户类型都有管理员可调的限制。限制爬虫的并发性,并设置每个 IP 的使用限制,以防止失控的循环耗尽您的预算或共享出口。
我可以获得一个稳定的IP用于登录抓取吗?
是的。专用个人IP附加组件是一个静态出口,你可以选择将其与身份解绑,并绑定到代理或VPN——当目标将会话与一个一致的地址绑定时,这很有用。
人们通过搜索找到此页面
- 如何在抓取时避免IP封禁
- 什么是ISP(静态住宅)代理?
- 如何在抓取时避免IP封禁 用于抓取
- 如何在 Chrome 和 Firefox 中设置代理
- 带身份验证的 Puppeteer 代理设置
- 如何配置IP地址
- openvpn
- 代理认证 教程
- socks5代理 用于商业
- WireGuard与OpenVPN:选择哪个VPN协议
- 免费代理列表
- 新鲜的免费代理列表
- 什么是 wireguard
- 便宜的 http 代理
- 代理设置设置
- IP地址 适合初学者
此页面回答的真实搜索短语 — 链接的短语打开详细覆盖它们的页面。