住宅ip使用指南,不被屏蔽的网页抓取教程
最后更新于:2022-12-28 11:28:52
使用住宅ip代理进行Web搜刮抓取或爬虫爬行是通过住宅代理服务器下载和解析 HTML 代码从第三方网站获取数据以提取所需数据的一种方式。
通常你可以通过使用 API的方式来开展Web搜刮抓取活动,并非每个网站都提供 API,而且 API 并不总是公开您需要的每条信息。因此,直接使用Web爬虫抓取的方式通常是提取网站数据的唯一解决方案。
网络抓取有很多实际应用例如:
• 电商价格监控
• 新闻资讯聚合
• 基于特定国家地区的SEO优化
• 旅游价格信息及旅行机票费用整合
• 对于广告效果进行验证
那么,我们在进行网络抓取的这些有用信息及资料的时候具体会遇到什么问题呢?
目前来看主要问题是大多数网站不想被抓取。他们只想为使用真实IP和网络浏览器环境的真实用户提供内容,所以当你抓取时,你必须小心,不要因为被网站或者网络服务识别为机器人或者抓取爬虫而被拒之门外,面对这个情况我们能做的简单来说就是2件事:模拟真实用户网络环境和模拟真实用户行为。这篇文章将指导您完成怎样做好这2件事情以及中间涉及到的技术和工具。
模拟真实用户网络环境工具:Hedless Chrome
为什么要使用无头浏览?
当您打开浏览器并准备开始访问网页时,就意味着您正在向 HTTP 服务器发送获取某些内容的请求。从HTTP服务器提取内容的最简单方法之一是使用经典的命令行工具,例如cURL。
但是当你只是简单的做一个cURL请求时,例如 curl www.yilus5.com时,易路代理有很多中方法可以知道你不是一个真正的人类,只需要查看下请求的响应头信息就能够做出判断。请求头是与每个到达服务器的 HTTP 请求一起出现的信息,其中一条信息精确地描述了发出请求的客户端,这里说的是“User-Agent”请求头。只需查看“User-Agent”HTTP标头,易路代理现在就知道您正在使用 cURL。如果你想了解更多关于 headers 的信息,可以去维基百科查看具体的相关资料信息。
使用 cURL 更改标头很容易,只需要复制合法的浏览器User-Agent 标头加入到请求中就可以了。在实际操作过程中,您需要设置的可能不仅仅是一个标头,这时我们可以使用特定的cURL库来使任何请求看起来都跟真实的用户发出的请求完全一样。但是每个人都知道这一点,因此要知道网站或者网络服务要知道您是否是真实的用户只需要检查下cURL 和相应的库不能做的一件事,那就是JS 执行情况,即 检查JavaScript 代码是否是在Web浏览器中运行的。
JS代码能够正常运行吗?
这个概念其实可以这样理解,就是的您否像真实的浏览器环境一样正常运行一段JS代码,网站在其网页中嵌入了一小段 JS,一旦执行,该网页就会接触对你的封锁。如果您使用的是真正的浏览器,那么您不会注意到其中的区别,但如果您不是,您将收到的是一个带有一些模糊 JS代码片段的 HTML 页面。
但是,这个识别是否是爬虫机器人的解决方案并不是完全可靠的,因为自从有了nodeJS技术以来,现在在浏览器之外执行 JS已经变的非常容易。不过随着网络技术的不断发展,网站已经可以通过检测的因素来确定您是否使用真正的浏览器。
无头浏览
一旦目标网站或者网络服务有一个更复杂的检查验证系统或者是一个大的单页应用程序,cURL 和 node 的伪 JS 执行就变得毫无用处了。因此,看起来像真正的浏览器的最好方法就是实际使用一个浏览器。
无头浏览器的行为与真正的浏览器可以说是几乎一摸一样,只是您可以轻松地以编程方式来驱动它们来进行网络访问和操作。最常用的是 Chrome Headless,这是一个 Chrome 选项,具有 Chrome 的所有功能只是没有可视化的UI界面而已。
使用 Headless Chrome 最简单的方法是调用驱动程序,将其所有功能包装到一个简单的 API 中,Selenium和Puppeteer是两个最著名的解决方案。
然而,这还不够,因为现在网站服务器这边已经有工具可以检测出无头浏览器。关于检测与反检测的博弈一直在暗自较量并且不断升级。
指纹识别
几乎所有的前端开发人员都知道每个浏览器的行为有何不同。有时存在的差别可能是关于CSS的渲染,有时是JS运行的状况,或者是内部属性。这些差异中的大部分是众所周知的,不过随着各大网站和网络服务商这边检测系统的升级与完善,现在可以轻松检测浏览器的真实与否,只需要将所有浏览器属性和行为是否都与网站检测系统中所知道的有关此浏览器发送的用户代理的信息做个匹配就能得出结论,这就是爬虫系统与反爬虫系统之间展开的一场漫长的博弈。
然而,在这场博弈过程中,网络抓取工具往往具有更大的优势,至于为什么可以继续往下看。
大多数时候,当 Javascript 代码试图检测当前请求是否在无头模式下运行时,网络抓取工具就会试图逃避行为指纹识别的恶意软件。这意味着 JS 在扫描环境中表现良好,而在真实浏览器中表现不佳。这就是为什么Chrome无头模式背后的团队试图让它与真实用户的网络浏览器无法区分,以阻止恶意软件这样做。这就是为什么在这场博弈中网络抓取工具可以从中获胜。
另一件需要知道的事情是,虽然并行运行 20 个 cURL 是微不足道的,但 Chrome Headless 虽然对于小规模的批量运行相对耗费的系统资源较少,但在大规模使用时可能会是个很棘手的问题。主要是因为它使用大量 RAM,因此 20 多个实例并发运行就成为了一个新的问题。
如果您想了解有关浏览器指纹识别的更多信息,我建议您可以Google一下指纹浏览器或者反指纹浏览器的相关资料信息。
这就是您了解如何模拟真实用户网络环境的全部内容。现在让我们来看看如何让你的行为表现得像一个真正的人。
模拟真实用户行为几大因素:代理、验证码处理和请求模式
使用代理
真实的用户很少会每秒向同一个网站发送20 个页面的请求,所以如果你想从同一个网站请求很多页面,你必须欺骗这个网站隐藏好自己的真实身份,让它认为所有这些请求都来自世界上各个不同的地方,您可以使用不同的IP地址来处理这个问题,那么相对应的解决方案就是使用代理。
现在市面上的代理不是很贵:每个 IP 约 1 美元。但是,如果您每天需要在同一个网站上处理超过 10k 个请求,那么至少需要数百个IP地址,从而导致成本会迅速上升。而且需要监控代理IP的运行状态,确保它能够正常顺利的工作。
市场上有几种代理解决方案,这里是最常用的:易路代理 YiLuProxy、Luminati Network和SmartProxy。
还有很多免费的代理列表,我不建议使用这些,因为它们通常速度慢、不可靠,而且提供这些列表的网站并不总是会清晰的高速你关于这些代理IP的地理位置信息。而且这些免费代理列表绝大部分都是公开的,每个人都可以获取到,因此,它们的 IP 早就已经被大多数网站封禁或者是列入了黑名单之中。代理的质量非常重要,经常采集抓取数据的人都知道网站或者网络服务的反爬行系统会维护一个内部代理 IP 列表,所有来自这个IP列表的代理流量都会被阻止。所以在选择的时候一定要谨慎选择高质量的私人代理IP。这就是为什么我建议使用付费代理网络或构建自己的代理网络的原因。
如果您要构建您自己的代理IP平台,您可以看看scrapoxy,这是一个很棒的开源 API,它允许您在不同的云提供商之上构建代理 API。Scrapoxy 将通过在各种云提供商例如AWS、OVH、Digital Ocean等并且允许您通过创建这些平台上的实例来创建代理池。然后您将能够配置属于您自己的代理客户端并使用 Scrapoxy URL 作为主要代理,而且 Scrapoxy 它将自动在代理池中分配一个代理。Scrapoxy 很容易定制以满足您的一些特定需求比如进行速率限制和创建被封禁IP的黑名单等,但安装起来可能有点复杂可能需要一定的专业知识才可以成功。
您还可以使用 TOR 网络,又名The Onion Router。它是一个全球性的计算机网络,旨在通过许多不同的服务器路由流量以隐藏其来源,在网络抓取的应用中,TOR 可以隐藏您的 IP 地址,并且可以做到每 10 分钟更改一次机器人的 IP 地址。但是TOR 出口节点 IP 地址是公开的,所以一些网站使用一个简单的规则就可以阻止来自 TOR的流量:如果服务器收到来自 TOR 公共出口节点之一的请求,就会阻止它。这就是为什么在许多情况下,与经典代理相比,TOR其实并不能真正的帮到你的忙,同时由于多路由的原因,通过 TOR 的流量本质上连接速度也会比较慢。
验证码
有事仅仅使用代理也是远远不够的,一些网站会要求您通过验证码验证以此来证明您不是机器人。大多数时候,CAPTCHA 只显示给可疑的 IP,因此通过使用代理就能绕过验证码。当您在使用了代理之后继续出现需要输入验证码的情况的话,虽然有些验证码可以通过光学字符识别 (OCR) 自动解决,但是仍然建议您使用验证码解决服务2Captchas和DeathByCaptchas。
请求模式
网站用来检测抓取的最后一个高级工具就是进行模式的识别。所以如果您执行采集任务的计划时尽量不要按固定的顺序和采用恒定的请求速率。例如,您需要采集10000个产品数据,您可以先将他们按照 1 到 10 000 的整数进行排序,在采集时随机抽取该组中的一个整数,然后抓取您的产品,当然这只是一个简单的例子,一些网站还会争对每个端点的浏览器指纹进行检测和统计。这意味着如果您不更改无头浏览器中的某些参数并针对单个端点进行单独设置的话,网站或者网络服务同样能够阻止您的采集活动。但是根据经验,可以说请求速率是“请求模式识别”中最重要的因素,所以一般情况下你抓取的速度越慢,被发现的机会就越少。
结论
希望这篇概述能帮助您更好地理解网络抓取,并希望您从阅读这篇文章中学到一些东西。
我在这篇文章中谈到的一切都是我使用易路代理住宅ip总结出来的经验,所以当您在需要进行数据采集的时候代理部分完全可以优先考虑使用易路代理的动态住宅代理,它的客户端中拥有每个请求换IP的功能可以帮助您有效降低被限制的概率,提高采集的效率。