返回博客

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

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

什么是代理服务器?

简而言之,代理是客户端与服务器之间的中间件。当客户端向其他服务器请求资源时,代理会充当中间人。客户端-代理-服务器的关系流程大致如下:

  • 客户端连接到代理服务器,向目标服务器请求某项服务
  • 代理服务器会分析请求,连接到目标服务器并获取所需的服务
  • 接收后,它会将该服务原样转回给客户端。

此外,代理服务器还用于:

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

什么是 ISP 代理?

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

说到IPS代理,这里存在一些混淆。首先,ISP是“互联网服务提供商”(Internet Service Provider)的缩写。正如你所想象的,所有住宅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:创建新项目

首先,我们先创建一个用于存放文件的新目录。接下来,在您常用的集成开发环境(我使用的是 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>

Now that we have an IP address to test on, just send your `whois` command. I’ve used my own IP, but feel free to replace <IP_ADDRESS> with yours:

~ » 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 是 WebScrapingAPI 的全栈及 DevOps 工程师,负责开发产品功能并维护确保平台平稳运行的基础设施。

开始构建

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

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