返回博客
网络爬虫技术
Mihnea-Octavian ManolacheLast updated on Mar 31, 20262 min read

什么是 ISP 代理,以及如何将其用于网页抓取

什么是 ISP 代理,以及如何将其用于网页抓取

代理是网络爬虫中非常重要的一环。代理主要分为三种类型。 它们分别是数据中心代理、住宅代理和 ISP 代理。每种类型都有其特定的应用场景。然而,关于它们的具体含义以及在网络爬虫中何时使用,目前可查的信息寥寥无几。尤其是 ISP 代理,往往被技术撰稿人忽略。因此,今天我们将重点关注这一类代理。读完本文后,您将对以下内容有深入的了解:

  • 什么是代理服务器以及其工作原理
  • ISP代理的定义及其特点
  • 如何以及为何在网页抓取中使用 ISP 代理

什么是代理服务器?

简而言之,代理是客户端与服务器之间的中间件。代理会作为中介,处理客户端向其他服务器请求资源的请求。客户端-代理-服务器的交互流程大致如下:

  • 客户端连接到代理服务器,向目标服务器请求某项服务
  • 代理服务器评估该请求,连接到目标服务器并获取所请求的服务
  • 获取服务后,将其原样转发回客户端

除此之外,代理还用于:

  • 增强安全性
  • 提升网络性能
  • 过滤网络流量
  • 屏蔽不需要的网站
  • 绕过互联网访问的地理限制

什么是 ISP 代理?

正如我们在引言中讨论的那样,代理主要分为三种类型。前两种的定义相当直观。数据中心代理是由数据中心拥有的代理,这意味着其IP地址与该数据中心相关联。住宅代理的IP地址则与某个物理位置相关联,而且这些IP地址是注册给特定个人或组织的。

至于 ISP 代理,这里存在一些混淆。首先,ISP 代表互联网服务提供商。正如您所想象的,所有住宅 IP 都源自 ISP。这一小点部分回答了这个问题。ISP 代理介于数据中心代理和住宅代理之间。

大多数情况下,你会发现 ISP 代理实际上是托管在数据中心服务器上的住宅代理。因此,这类代理兼具前两者的优势。其主要优势包括(但不限于):

  • IP 合法性——使用住宅 IP 地址可降低被识别为机器人的风险
  • 速度——将代理部署在数据中心服务器上可提升服务性能

为何在网页抓取中使用 ISP 代理?

在网页抓取中使用代理是相当普遍的需求。但在具体讨论 ISP 代理之前,请允许我先说明代理为何对抓取如此重要。首先,让我们定义什么是网页抓取。 从宏观层面看,网络爬虫是指以提取资源为目的访问服务器的行为,通常通过自动化软件实现。此外,网络爬虫通常涉及在短时间内向目标服务器发送大量请求。

不难想象,这会给服务器带来巨大负载。这也正是为何网络平台通常“不欢迎”爬虫访问其服务器。为阻止自动化软件的访问,这些平台通常会部署某种检测与防御系统。其中一种检测方法极其基础:检查 IP 地址。人们普遍认为,与数据中心关联的 IP 地址更可能被用于运行爬虫。

我认为这很好地回答了这个问题。如果结合之前讨论的主要优势,我们将对答案有更全面的理解。我们在网络爬虫中主要使用 ISP 代理,以在保持最佳性能的同时提高成功率。但这还不是全部。让我们探索其他场景:

#1:访问地域限定网站

相信您一定遇到过针对特定地区访客的网站。在SEO领域,这种概念被称为“基于地理位置的内容”。其运作原理是:网站首先检测客户端IP地址的来源。如果符合其预设模式(例如,一个仅面向美国用户的美国网站),就会允许该客户端连接;反之,如果客户端来自其他国家,网站则会封锁其访问权限。

在网页抓取中,这种情况非常常见。因此,作为解决方法,我们将使用来自该特定国家的代理。你可以先尝试数据中心代理。如果仍然被封锁,可以尝试 ISP 代理,其成功率通常更高。

#2:发送大量请求

当我们试图访问服务器上的大量资源时,可能会给该服务器带来巨大负载。服务器通常会将此视为滥用行为,并封禁发送所有这些请求的 IP 地址。在网页抓取中,为避免被封禁,我们会采用在 ISP 代理之间轮换的系统。这样,服务器会“认为”是不同的家庭用户在访问它。因此,批量请求就不会被封禁。

如何使用 ISP 代理进行网页抓取?

网络爬虫主要分为两类:

  • 基于简单HTTP客户端的
  • 支持渲染 JavaScript

第一种类型并不复杂,且通常速度更快,因为它无需渲染 JavaScript。这与发送 `curl` 命令并无二致。然而,大多数现代网站高度依赖 JavaScript。一个典型的例子是使用简单的 HTTP 客户端来抓取基于 React 或 Next.js 构建的 Web 平台。在这种情况下,您可能会收到一个显示“请启用 JavaScript”的 HTML 文件。 以下是我用 React 构建的一个应用的实例:

~ » curl https://<REACT_APP>.com

...<body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

因此,若要构建现代化的爬虫,你很可能需要使用自动化浏览器。这既能渲染 JavaScript,也能在目标页面上执行各种操作。

我通常在示例中使用 JavaScript 和 Puppeteer。但这次我想改用我最先接触且最喜欢的编程语言:Python。而 Python 中最常用的 Web 驱动程序解决方案是 Selenium。那么,让我们来看看如何使用 Selenium 和 ISP 代理构建一个网页爬虫:

#1:创建新项目

首先,创建一个用于存放文件的新目录。接下来,在您常用的 IDE(我使用 Visual Studio Code)中打开该项目,并开启一个新终端。要在 VSCode 中打开新终端,请前往“终端”>“新建终端”。我们将在项目内创建一个新的虚拟环境并激活它:

~ » python3 -m venv env && source env/bin/activate

在项目中,创建一个名为“scraper.py”的新文件并添加代码。从函数式编程的角度来看,基于 Selenium 的爬虫基本结构如下:

from selenium import webdriver

def scrape_page(url):

   driver = webdriver.Chrome()

   driver.get(url)

   return driver.page_source

就这样。仅需 5 行代码:

  • 我们正在启动一个自动化浏览器
  • 访问目标页面
  • 并收集其资源。

但请记住,我们希望在 Selenium 中使用 ISP 代理。这样虽然我们的浏览器并非最隐蔽的,但可以说更难被检测到。幸运的是,在 Python 中实现起来相当简单(这也是我喜欢它的原因)。以下是在 Selenium 中引入代理的方法:

from selenium import webdriver

def scrape_page(url, proxy):

   options = webdriver.ChromeOptions()

   options.add_argument('--proxy-server=%s' % proxy)

   driver = webdriver.Chrome(options=options)

   driver.get(url)

   return driver.page_source

print(scrape_page('http://httpbin.org/ip', '75.89.101.60:80'))

我们只是在函数内部添加了更多代码行。最后一行是调用该函数。如果你现在运行脚本,应该能看到请求源自 75.89.101.60。 为了演示,我使用了此处的免费代理服务器。但如果你想构建一个真正的爬虫,建议你寻找更可靠的来源。最好是那些同时提供 ISP 代理的代理服务商。

如何检查 IP 地址的来源?

有几种方法可以判断 IP 地址是否来自 ISP 代理。但既然今天我们讨论的是 DevOps,你最好先熟悉一下终端操作。今天我将向你介绍 `whois`。

在 Unix 及类 Unix 操作系统中,`whois` 是内置命令。这是一个命令行工具,允许用户查询目标信息,目标可以是域名或 IP 地址。那么,让我们打开一个新的终端窗口,测试一下这个命令。

首先,我们向 ipify.org 提供的 API 发送一个 `curl` 命令。这样,你就可以获取自己的 IP 地址并用它进行测试。如果你不熟悉 `curl`,可以参考我关于如何使用 curl 的文章。

~ » curl api.ipify.org

<IP_ADDRESS>

现在我们有了待测试的 IP 地址,只需发送 `whois` 命令即可。我使用了自己的 IP,但请随意将 <IP_ADDRESS> 替换为你的 IP:

~ » whois <IP_ADDRESS>

...

inetnum: 82.78.XX.0 - 82.78.XX.XX

netname: RO-RESIDENTIAL

descr: RCS & RDS Residential CGN

descr: City: Bucuresti

remarks: INFRA-AW

country: RO

...

输出内容较长,但我希望您能直观了解住宅 IP 被检测出的过程是多么简单。此外,还有一些公共 API 可追踪数据中心 IP,例如 incolumitas 提供的服务

结论

今天我们既探讨了构建网络爬虫所需的 DevOps 技能,也涉及了编码技巧。最后,我想问大家一个简单的问题:能否说 ISP 代理不过是隐藏在住宅 IP 地址背后的数据中心代理?我认为这并非最准确的定义,但确实很好地描述了这类代理。

在 Web Scraping API,我们同时使用住宅代理和数据中心代理。这是因为某些目标站点允许非住宅流量访问,而另一些则不允许。如果您想进一步了解如何通过我们的 API 使用代理,请查阅我们的文档

关于作者
Mihnea-Octavian Manolache, 全栈开发工程师 @ WebScrapingAPI
Mihnea-Octavian Manolache全栈开发工程师

Mihnea-Octavian Manolache 是 WebScrapingAPI 的全栈及 DevOps 工程师,负责开发产品功能并维护确保平台平稳运行的基础设施。

开始构建

准备好扩展您的数据收集规模了吗?

加入2,000多家企业,使用WebScrapingAPI在无需任何基础设施开销的情况下,以企业级规模提取网络数据。