网络爬虫 · 1 分钟阅读

如何使用代理进行网络爬虫

代理保持您的抓取器的源服务器隐藏,并在 IP 之间分散请求,以便单个地址不会被限速或封锁。本指南涵盖选择代理并将其接入 Python、Scrapy 和 Playwright。

为什么你的抓取器需要代理

几乎所有抓取设置都面临两个问题:保护您的真实 IP 和保持在每个 IP 的速率限制之下。

当爬虫从一个地址发送数千个请求时,目标网站会将单个IP视为机器人。通常的结果是速度变慢、出现验证码墙,或者直接被封锁——更糟糕的是,被封锁的地址是你的源服务器,即运行你业务逻辑的机器。代理位于你的抓取器和目标之间,因此网站只会看到代理的出口IP,而不会看到你的真实IP。

几乎所有抓取设置都受到两个关注点的影响:

  • 保护你的源。如果你的生产服务器的IP被列入黑名单,损害将超出抓取的影响。通过代理路由可以保持该地址干净,并与抓取无关。
  • 分散负载。将请求分散到多个出口IP上,可以使其中任何一个都在目标的每IP速率限制之下,从而在不触发滥用防御的情况下收集数据。

s4m提供经过身份验证的数据中心SOCKS5和HTTP代理,正是为了这个目的。它们快速且便宜,适合高流量、容忍度高的目标——但由于它们是数据中心IP,严格的网站可以比住宅地址更容易地指纹识别它们,因此请相应地设定期望。对于快速实验,你可以从免费公共代理列表中获取一次性端点,第三方代理经过持续验证,但严格使用风险自负。如果你还想隐藏整个应用或服务器而不是单个客户端,VPN隧道可以覆盖其所有流量。有关计量代理费率,请参见定价。

选择用于抓取的代理

将工具与工作匹配。以下是s4m的选项在抓取工作负载中的比较。

数据中心 SOCKS5 / HTTP

在 proxy.s4m.online 上按需计费的代理 — SOCKS5 的端口为 1080,HTTP 的端口为 3128,使用 USER:PASS 进行身份验证。快速且具有成本效益,适合大规模抓取那些不会积极评分 IP 声誉的目标。这是生产抓取的主力。

免费的公共代理列表

从开放源中收集的第三方代理,持续重新验证,可按国家、协议和匿名性过滤。非常适合在您投入预算之前原型化抓取器——但不可靠,使用风险自负,绝不适合生产工作。

专用个人IP

一个可选的静态IP,仅属于您,可以绑定到您的代理,并可选择与您的身份解绑。当目标白名单单个地址时,或者当您需要一个稳定的、不会在您身下旋转的粘性会话时,这非常有用。

集成和控制您的爬虫

从第一次经过身份验证的请求到会话、轮换、速率限制和成本控制。

将您的客户端指向代理

在Python请求中,将proxies字典设置为socks5://USER:PASS@proxy.s4m.online:1080(安装requests[socks])或HTTP端点在3128。在Scrapy中,启用HttpProxyMiddleware并为每个请求设置代理或通过http_proxy环境变量设置。在Playwright中,将proxy={"server": ...}传递给browser.launch()。

选择会话与轮换

当目标将cookie和登录状态与IP绑定时,使用一个持久的requests.Session——或一个专用个人IP,因为在会话中切换看起来可疑。在爬取公共列表时,在多个出口IP之间轮换,以保持在每个IP的限制之下。不要为同一逻辑身份混合使用这两者。

限制并尊重目标

遵守robots.txt,阅读网站的服务条款,并添加延迟:在请求中使用time.sleep,在Scrapy中使用DOWNLOAD_DELAY和AutoThrottle。稳定的人类规模请求速率比突发请求被封锁的频率要低得多——负责任地抓取既是道德选择,也是有效选择。

限制您的支出

由于数据中心代理是按需计费的,请注意使用情况。s4m允许管理员在三个维度上设置限制 — 每种账户类型、每个IP和每个账户 — 这样一个失控的爬虫就无法悄悄消耗您的预算。在启动大型任务之前设置每个账户的上限。

Python:通过s4m代理抓取

一个最小的、礼貌的请求抓取器,通过您的 s4m 数据中心代理而不是您的源服务器退出。

python
import time
import requests

# s4m datacenter proxy endpoints:
#   SOCKS5 -> proxy.s4m.online:1080   (pip install "requests[socks]")
#   HTTP   -> proxy.s4m.online:3128
PROXY = "socks5://USER:PASS@proxy.s4m.online:1080"
# PROXY = "http://USER:PASS@proxy.s4m.online:3128"

session = requests.Session()
session.proxies.update({"http": PROXY, "https": PROXY})
session.headers.update(
    {"User-Agent": "my-scraper/1.0 (+contact@example.com)"}
)

# Confirm requests now exit through the proxy, not your real IP:
print("exit IP:", session.get("https://api.ipify.org", timeout=15).text)

for page in range(1, 6):
    r = session.get(f"https://example.com/list?page={page}", timeout=20)
    r.raise_for_status()
    # ... parse r.text here ...
    time.sleep(1.5)  # throttle: stay within the target's rate limits
FAQ

问题,已解答

s4m的代理是住宅代理吗?

不。s4m提供经过身份验证的数据中心SOCKS5和HTTP代理。它们速度快且具有成本效益,但由于它们是数据中心IP,能够检测IP声誉的网站比住宅地址更容易识别它们。我们不出售或声称住宅代理。

我可以自动轮换IP吗?

您可以通过循环请求或会话来驱动轮换。对于固定的、非轮换的出口,添加一个专用个人IP并将其绑定到您的代理。将任一方法与s4m的每个IP和每个账户的使用限制配对,以保持行为和成本的可预测性。

SOCKS5 或 HTTP — 我该选择哪个进行抓取?

两者都可以。SOCKS5(端口1080)是协议无关的,可以处理任何TCP流量,这对于像Playwright这样的浏览器自动化很方便。HTTP(端口3128)是最简单的适合于基于请求的脚本。选择你的客户端支持的最佳选项。

我可以使用免费代理列表进行生产抓取吗?

保留用于测试。免费列表从开放源中聚合第三方代理;它们会持续验证,但可能随时消失或变慢,您使用它们需自担风险。对于可靠的工作,请使用 s4m 的认证数据中心代理。

通过代理进行网页抓取合法吗?

代理更改网站看到的IP;它不授予权限。始终检查目标的服务条款和robots.txt,避免收集您无权收集的个人或受版权保护的数据,并保持请求速率合理。代理不能替代合法和道德的抓取。

开始抓取而不暴露您的来源

启动经过身份验证的数据中心 SOCKS5 和 HTTP 代理,或先使用免费的公共列表进行原型设计。匿名账户,设计上不记录日志,您只需为您计量的数据付费。

人们通过搜索找到此页面

此页面回答的真实搜索短语 — 链接的短语打开详细覆盖它们的页面。