返回博客
指南
斯特凡·拉西拉2023年4月7日阅读时长:11分钟

避免网络抓取时被阻止或禁止 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. 使用无头浏览器

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

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

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

请查阅我们关于“如何在 Node.js 中使用 Puppeteer”和“如何在 Python 中使用 Selenium”的详细指南,以了解更多关于无头浏览器的使用方法。

6. 使用真实用户代理

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

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

7. 使用验证码破解服务

CAPTCHA(全自动公开图灵测试,用于区分计算机与人类)是一种网站用于防止自动化抓取的技术。该测试通过展示需要人类才能完成的任务来区分人类与机器人,例如识别图片中的一串字符。当遇到此类验证时,请准备好使用Anti Captcha或2Captcha等第三方服务来处理

您可能需要考虑,长期抓取那些需要持续破解验证码的网站是否仍然划算。部分验证码破解服务商不仅速度较慢,而且费用高昂。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
斯特凡·拉西拉全栈开发工程师

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

开始构建

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

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