返回博客
指南
Ștefan RăcilăLast updated on Mar 31, 20261 min read

网络爬虫时避免被封号或IP封禁的11条实用建议

网络爬虫时避免被封号或IP封禁的11条实用建议

网络爬虫是从网站中提取有价值数据的强大工具。它能够自动化数据收集过程,无论是对企业还是个人而言,都能极大节省时间。然而,能力越大,责任越大。如果操作不当,您的 IP 地址可能会被正在爬取的网站封禁或屏蔽。

本文将分享 11 条详细建议,教你如何在爬网时避免被封禁或列入黑名单。遵循这些建议,你将学会如何在爬网时保护自身身份、如何遵守网站的服务条款,以及如何合理安排请求时间,避免因请求过多而导致目标网站不堪重负。

为何会被封禁?

网络爬取并非总是被允许的,因为这可能被视为违反网站的服务条款。网站通常会对爬取工具的使用制定具体规则,可能完全禁止爬取,或对爬取方式及数据内容设置限制。此外,爬取网站会给服务器带来巨大负载,导致合法用户的访问速度变慢。

在抓取个人信息或财务数据等敏感信息时,您可能会遇到问题。此类行为不仅可能引发严重的法律纠纷,还可能违反隐私和数据保护法规。

此外,部分网站已部署反爬虫措施来检测并阻止爬虫程序。使用爬虫技术可能被视为试图绕过这些措施,这也属于被禁止的行为。

总之,务必始终遵守网站的服务条款,并确保您的抓取行为符合道德和法律规范。如果您不确定抓取是否被允许,最好向网站管理员或法律团队咨询。

1. 遵守网站的服务条款

在对网站进行抓取前,务必阅读并理解该网站的服务条款。这些条款通常位于网站页脚,或单独的“服务条款”或“机器人排除”页面中。遵守服务条款中列出的所有规则和规定至关重要。

2. 关注“robots.txt”文件

机器人排除协议(REP)是网站用于与网络爬虫及其他自动化程序(如数据抓取工具)进行通信的标准。REP通过放置在网站服务器上的“robots.txt”文件来实现。该文件包含针对网络爬虫及其他自动化程序的指令,用于告知它们哪些网页或网站部分不应被访问或收录。

robots.txt 文件是一个简单的文本文件,它使用特定的语法来指示应排除在爬网范围之外的网站部分。例如,该文件可能包含排除某个目录下的所有页面或特定文件类型页面的指令。遵守 REP 的网络爬虫或数据抓取工具在访问网站时会读取 robots.txt 文件,并不会访问或索引文件中排除的任何页面或部分。

例如,您可以在此处查看我们网站的 robots.txt 文件。

3. 使用代理

在进行网页抓取时,您可能出于多种原因使用代理。代理允许您通过不同的 IP 地址路由请求。这有助于隐藏您的身份,并使网站更难追踪您的抓取活动。通过轮换 IP 地址,网站将更难检测并封锁您的抓取工具。请求看起来将像是来自不同的位置。

绕过地理限制

部分网站可能设有地理限制,仅允许特定IP地址的用户访问。通过使用位于目标地区的代理服务器,您可以绕过这些限制并获取数据。

避免IP封禁

网站会检测并拦截请求频率过高的情况,因此请务必分散请求时间,避免一次性发送过多请求。使用代理可通过不同IP地址发送请求,从而帮助您规避IP封禁。即使某个IP地址被封禁,您也可以切换到另一个IP地址继续抓取。

4. 轮换 IP 地址

IP轮换是网络爬虫中的一种技术,用于隐藏您的身份,并使网站更难检测和封锁您的爬虫。IP轮换涉及对向网站发出的每个请求使用不同的IP地址。通过轮换IP地址,您可以使您的爬取活动看起来更像正常的人类流量。

在抓取过程中实现IP轮换主要有两种方式:

使用代理IP池

该方法涉及使用来自不同代理服务器的IP地址池。在向网站发送请求之前,爬虫会从该池中随机选择一个IP地址用于该次请求。

使用代理轮换服务

该方法是使用一种服务,该服务会自动为每次向网站发出的请求轮换 IP 地址。该服务将维护一个 IP 地址池,并自动为每次请求分配不同的 IP 地址。这可能是更便捷的 IP 轮换方式,因为您无需管理 IP 地址池,可以让服务为您处理此事。

IP轮换还能通过同时通过多个IP地址发送请求,从而加快抓取速度。

5. 使用无头浏览器

为避免在网页抓取时受到限制,您需要让与目标网站的交互看起来像普通用户访问 URL 一样。使用无头浏览器是实现这一目标的最佳方法之一。

无头浏览器是一种不带图形用户界面的浏览器,可通过编程或命令行进行控制。这使您能够像手动浏览一样与网站交互,从而提高爬虫不被察觉的概率。

您可以使用 Puppeteer 或其他浏览器自动化工具包,将无头浏览器集成到您的爬虫程序中。

请查阅我们的深度指南《如何在 NodeJS 中使用 Puppeteer》和《如何在 Python 中使用 Selenium》,以了解更多关于无头浏览器的使用方法。

6. 使用真实用户代理

大多数主流网络浏览器(如 Google Chrome 和 Firefox)都支持无头模式。即使您使用官方浏览器以无头模式运行,也必须使其行为看起来自然。为此,通常会使用各种特殊的请求头,例如 User-Agent。

用户代理(User-Agent)是一串字符,用于标识发起请求的软件、版本及设备。网站可利用这些信息决定如何响应请求,也可据此追踪请求来源。通过使用高度模拟常用浏览器的用户代理,您可以提高爬虫不被察觉的概率。

7. 使用验证码破解服务

CAPTCHA(全自动公共图灵测试,用于区分计算机与人类)是网站用于防止自动化抓取的一种技术。该测试通过展示需要人类才能完成的挑战来区分人类和机器人,例如识别图片中的一串字符。请准备好使用 Anti Captcha2Captcha 等第三方服务来处理这些挑战

您可能需要考虑,长期需要持续破解验证码的网站是否仍具有盈利价值。部分验证码破解服务商速度较慢且费用高昂。WebScrapingAPI 拥有先进的反机器人机制,可减少遇到的验证码数量。我们还采用自动验证码破解作为备用方案。

8. 放慢速度

切勿过快抓取,短时间内发送过多请求可能会导致网站检测到您正在抓取其内容,从而阻断您的请求。因此,合理间隔请求并避免一次性发送过多请求至关重要。

在请求与操作之间添加随机延迟。这样能让爬虫或抓取工具的行为对目标网站更难预测,从而降低被检测的风险。

避免在短时间内抓取大量数据。短时间内抓取大量数据会触发网站的垃圾信息过滤器,导致您被封禁。因此,分批进行抓取并避免在短时间内抓取大量数据至关重要。

9. 警惕蜜罐陷阱

某些网站会设置蜜罐陷阱。这些机制旨在将机器人引诱至陷阱中,同时不被真实用户察觉。

那些包含在网站 HTML 代码中但对人不可见的链接,是最基础的蜜罐陷阱之一。要判断某个链接对真实用户是否可见,您可以检查其计算样式。

以下是一个包含两个函数的代码示例,它们将返回网页上所有可见链接的列表。该函数会检查每个链接的背景色是否与文字颜色相同。它还包含一个名为 strict 的参数,该参数会指示函数检查链接是否被显示,因为并非所有未显示的链接都是蜜罐陷阱。

function getComputedBackgroundColor(elem) {
    let isTransparent
    do {
        const bgColor = window.getComputedStyle(elem).backgroundColor
        isTransparent = !/rgb\(|[1-9]{1,3}\)'$/.test(bgColor) // you can test this regex on regex101.com

        if (isTransparent) {
            elem = elem.parentElement
        }
    } while (isTransparent)

    return window.getComputedStyle(elem).backgroundColor
}

function filterLinks(strict) { 
	let allLinksArray = Array.from(document.querySelectorAll('a[href]')); 
	console.log('There are ' + allLinksArray.length + ' total links'); 
    
	let filteredLinks = allLinksArray.filter(link => { 
		let linkCss = window.getComputedStyle(link); 
		let isDisplayed = linkCss.getPropertyValue('display') != 'none'; 
		let isVisible = linkCss.getPropertyValue('visibility') != 'hidden';
        let computedBgColor = window.getComputedBackgroundColor(link)
        let textColor = linkCss.textColor

        if (strict) {
            if (isDisplayed && isVisible && computedBgColor !== textColor) return link; 
        } else {
            if (computedBgColor !== textColor) return link; 
        }
	}); 
    
	console.log('There are ' + filteredLinks.length + ' visible links'); 
}

通常,蜜罐陷阱会与能够识别自动化请求的追踪系统结合使用。通过这种方式,即使未来的请求并非来自同一 IP 地址,网站也能将其识别为具有相似特征的请求。

10. 使用 Google 快取

Google 缓存是 Google 搜索的一项功能,允许用户查看网页的缓存版本。即使原始网站无法访问或网页已被删除,该功能依然有效。在网页抓取过程中,此功能非常有用,因为即使原始网站屏蔽了您的 IP 或抓取工具,您仍可通过缓存访问该网页。

要访问网页的缓存版本,您需要在目标网页的 URL 前添加前缀“https://webcache.googleusercontent.com/search?q=cache:”。 例如,若要抓取 WebScrapingAPI 的定价页面,可访问“https://webcache.googleusercontent.com/search?q=cache:https://www.webscrapingapi.com/pricing”。

在抓取时使用谷歌缓存是一个不错的替代方案,但请注意其可能存在局限性。缓存中的网站数据可能已过时。谷歌抓取网站的频率取决于网站的热门程度,因此对于不太热门的网站,数据可能非常陈旧。

其他注意事项包括:您可能无法有效使用目标网页的查询参数或锚点。此外,部分网站可能会主动要求谷歌不要缓存其页面。

11. 聘请专业服务

聘请专业的爬取服务可帮助您规避常见的爬取陷阱,并为您提供干净、可靠的数据。WebScrapingAPI 是顶尖的爬取服务商之一,拥有处理大规模爬取任务所需的必要基础设施、带宽及 IP 轮换系统。

请注意,这些建议仅为通用指南,并不能保证完全避免被封禁。每个网站各不相同,且拥有不同的反爬虫政策。但遵循这些建议将有助于提高您的爬虫顺畅运行且不被察觉的几率。

总结

综上所述,负责任地进行网页抓取至关重要,以此避免被封禁或列入黑名单。遵循本文概述的 11 条建议,您将保护好自身身份,遵守网站的服务条款,并避免因过多请求而导致网站不堪重负。请务必始终以符合道德和法律的方式进行抓取。这正是确保您不被网站封禁的关键。

此外,值得考虑使用专业的爬取服务。它们能为您提供干净可靠的数据,并帮助您避开常见的爬取陷阱。专业的爬取服务提供商拥有更先进的工具和技术来处理网页爬取。此类工具可协助应对验证码、处理错误以及绕过反爬取措施。它们既能为您节省时间和金钱,又能帮助您在法律框架内开展工作。

话虽如此,WebScrapingAPI 提供 7 天免费试用期,且无需信用卡,不妨一试。

关于作者
Ștefan Răcilă, 全栈开发工程师 @ WebScrapingAPI
Ștefan Răcilă全栈开发工程师

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

开始构建

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

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