10 种网页抓取而不会被阻止的方法

一、说明

        在数据爬取中,你的scraper又被挡住了吗?这很令人沮丧。但我们冷静下来,看看业内别人的说法,并将与您分享十种简单的解决方案来获取您想要的数据。

以下是尝试在不被阻止的情况下成功进行网络抓取的简短概述:

  1. 设置实际请求标头。
  2. 使用代理。
  3. 使用高级代理。
  4. 使用无头浏览器。
  5. 智胜蜜罐陷阱。
  6. 避免指纹识别。
  7. 绕过反机器人系统。
  8. 自动解决验证码。
  9. 利用 API 发挥您的优势。
  10. 停止重复失败的尝试。

二、避免被阻止的技术类型

        您需要使您的抓取器无法检测到,以便能够从网页中提取数据,而主要的技术类型是模仿真实的浏览器和模拟人类行为。例如,普通用户不会在一分钟内向网站发出 100 个请求。

        您将学习经过验证的技巧,并发现一些工具,以快速将它们实现到您的代码库中。

1. 设置实际请求标头

        正如我们提到的,您的抓取活动应该看起来尽可能与浏览目标网站的普通用户相似。Web 浏览器通常会发送大量 HTTP 客户端或库不会发送的信息。

        幸运的是,这很容易解决。首先,转到 Httpbin 并检查当前浏览器发送的请求标头。在我们的例子中,我们得到了这个:

HTTP Headers

        网页抓取最重要的标头之一是用户代理。该字符串通知服务器有关请求用户代理的操作系统、供应商和版本。

        然后,使用您喜欢的库设置这些标题,以便目标网站认为您的网络抓取工具是常规的网络浏览器。

        有关具体说明,您可以查看有关如何为 JavaScript、PHP 和 Python 设置标头的指南。

        对您的网络爬虫一次又一次地被阻止感到沮丧?
ZenRows API为您处理旋转代理和无头浏览器。
挡泥板

2. 使用代理

        如果您的抓取工具从某个 IP 地址发出太多请求,网站可以阻止该 IP。在这种情况下,您可以使用具有不同 IP 的代理服务器。它将充当您的网络抓取脚本和网站主机之间的中介。

        代理有多种类型。使用免费代理,您可以开始测试如何将代理与抓取工具或爬虫集成。您可以在免费代理列表中找到一个。

        但请记住,它们通常很慢且不可靠。他们还可以跟踪您的活动和连接,自我标识为代理,或使用禁止列表中的IP。

        如果您认真对待网络抓取而不会被阻止,那么有更好的选择。例如, ZenRows 提供出色的高级代理服务。

        理想情况下,您需要轮换 IP,因此您的活动似乎来自不同的用户,看起来并不可疑。如果一个 IP 被禁止或列入黑名单,这也很有帮助,因为您可以使用其他 IP。

        代理之间的另一个本质区别是,有些代理使用数据中心IP,而另一些则依赖于住宅IP。

        数据中心 IP 是可靠的,但易于识别和阻止。住宅 IP 代理更难检测,因为它们属于可能将其分配给实际用户的互联网服务提供商 (ISP)。

如何配置scraper以使用代理?

获得与刮板一起使用的代理后,您需要将两者连接起来。确切的过程取决于您拥有的刮刀类型。

如果您正在使用 Python 编写网络爬虫代码,我们有关于轮换代理的详细指南。

如果您的网络抓取工具在 Node.js 上运行,您可以通过以下方式将 Axios 或其他 HTTP 客户端配置为使用代理。

const axios = require('axios'); 
 
const proxy = { 
	protocol: 'http', 
	host: '202.212.123.44', // Free proxy from the list 
	port: 80, 
}; 
 
(async () => { 
	const { data } = await axios.get('https://httpbin.org/ip', { proxy }); 
 
	console.log(data); 
	// { origin: '202.212.123.44' } 
})();

3. 使用高级代理进行网页抓取

        具有住宅 IP 的高速可靠代理有时被称为高级代理。对于生产爬网程序和抓取程序,通常使用这些类型的代理。

        选择代理服务时,重要的是要检查它是否适用于网络抓取。如果您为一个高速的私人代理付费,该代理的唯一IP被目标网站阻止,您可能只是把钱花掉了。

        像这样的公司 ZenRows 提供为网络抓取和网络爬行量身定制的高级代理。另一个优点是它作为具有集成代理的 API 服务工作,因此您不必将刮板和代理旋转器捆绑在一起。

4. 使用无头浏览器

        为避免在网页抓取时被阻止,您希望与目标网站的交互看起来像访问 URL 的普通用户。实现这一目标的最佳方法之一是使用无头 Web 浏览器。它们是真正的 Web 浏览器,无需图形用户界面即可工作。

        大多数流行的网络浏览器,如谷歌浏览器和火狐浏览器都支持无头模式。但是,即使您在无头模式下使用官方浏览器,也需要使其行为看起来真实。添加一些特殊的请求标头来实现这一点是很常见的,例如用户代理。

        Selenium 和其他浏览器自动化套件允许您将无头浏览器与代理相结合。这将使您能够隐藏您的 IP 并降低被阻止的风险。

        要了解有关使用无头浏览器来防止您的网络抓取工具被阻止的更多信息,请查看我们的硒、剧作家和木偶师的详细指南。

5. 智取蜜罐陷阱

        一些网站会设置蜜罐陷阱。这些机制旨在吸引机器人,同时不被真实用户注意到。他们可以通过让爬虫和抓取器使用虚假数据来混淆它们。

        让我们学习如何在不落入陷阱的情况下获得蜂蜜!

        一些最基本的蜜罐陷阱是网站HTML代码中的链接,但对人类是不可见的。让您的爬网工具或抓取工具识别具有 CSS 属性的链接,使其不可见。

        理想情况下,您的抓取工具不应遵循与背景颜色相同的文本链接或故意对用户隐藏。您可以看到一个基本的 JavaScript 片段,它标识了下面 DOM 中的一些不可见链接。

function filterLinks() { 
	let allLinksAr = Array.from(document.querySelectorAll('a[href]')); 
	console.log('There are ' + allLinksAr.length + ' total links'); 
	let filteredLinks = allLinksAr.filter(link => { 
		let linkCss = window.getComputedStyle(link); 
		let isDisplayed = linkCss.getPropertyValue('display') != 'none'; 
		let isVisible = linkCss.getPropertyValue('visibility') != 'hidden'; 
		if (isDisplayed && isVisible) return link; 
	}); 
	console.log('There are ' + filteredLinks.length + ' visible links'); 
}

        避免蜜罐陷阱的另一个基本方法是尊重机器人.txt文件。它仅为机器人编写,并包含有关可以抓取或抓取网站的哪些部分以及应避免哪些部分的说明。

        蜜罐陷阱通常与旨在指纹自动请求的跟踪系统一起使用。这样,网站将来可以识别类似的请求,即使它们不是来自同一个IP。

6. 避免指纹识别

        如果您在请求中更改了很多参数,但您的抓取器仍然被阻止,则您可能已被指纹识别。也就是说,反机器人系统使用某种机制来识别您并阻止您的活动。

        为了克服指纹识别机制,使网站更难识别您的抓取工具。不可预测性是关键,因此您应该遵循以下提示。

  • 不要每天在同一时间提出请求。相反,请在随机时间发送它们。
  • 经常更改 IP。
  • 伪造和轮换 TLS 指纹。您可以在我们关于绕过 Cloudflare 的文章中了解更多信息。
  • 使用不同的请求标头,包括其他用户代理。
  • 将无外设浏览器配置为使用不同的屏幕尺寸、分辨率和已安装的字体。
  • 使用不同的无头浏览器。

7. 绕过反机器人系统

        如果您的目标网站使用 Cloudflare、Akamai 或类似的反爬虫程序服务,您可能无法抓取该 URL,因为它已被阻止。绕过这些系统具有挑战性,但有可能。

        例如,Cloudflare使用不同的机器人检测方法。他们阻止机器人的最重要工具之一是“等候室”。即使你不是机器人,也应该熟悉这种类型的屏幕:

云耀斑等候室

单击以全屏打开图像

        在等待期间,一些 JavaScript 代码会进行检查,以确保访问者不是机器人。好消息是这段代码在客户端运行,我们可以篡改它。坏消息是,它被混淆了,并不总是同一个脚本。

        我们有一个关于绕过Cloudflare的综合指南,但请注意;这是一个漫长而艰难的过程。绕过此类保护的最简单方法是使用像ZenRows这样的服务,旨在克服任何反机器人系统。

8. 自动化验证码求解

      绕过验证码是抓取 URL 时最困难的障碍之一。这些计算机挑战专门用于区分人类和机器人。通常,它们被放置在包含敏感信息的部分中。

        您应该考虑是否仍然可以获得所需的信息,即使您省略了受保护的部分,因为很难编写解决方案。

        从好的方面来说,一些公司提供为您解决验证码。他们雇用真人来完成工作,并按解决的测试收费。一些例子是反验证码和2验证码。

        总体而言,验证码解决速度慢且成本高昂。完全避免它们不是更好吗?ZenRows的反验证码将为您提供帮助,如果您正在寻找受CAPTCHA保护的内容。它将获得内容,而无需您采取任何行动。

9. 利用 API 发挥您的优势

目前,网站显示的大部分信息来自API。这些数据很难抓取,因为它通常是在用户执行某些操作后使用 JavaScript 动态请求的。

假设您正在尝试从出现在具有“无限滚动”的网站上的帖子中收集数据。在这种情况下,静态网页抓取不是最佳选择,因为您始终会从第一页获得结果。

您可以使用无头浏览器或抓取服务来配置这些网站的用户操作。ZenRows提供了一个网络抓取API,无需复杂的无头浏览器配置即可做到这一点。

或者,您可以对网站的 API 进行逆向工程。第一步是使用首选浏览器的网络检查器,并检查页面发出的 XHR (XMLHttpRequest) 请求。

 

开发人员工具中的网络请求

        然后,您应该检查发送的参数,例如页码、日期或参考 ID。有时,这些参数使用简单的编码来防止第三方使用 API。在这种情况下,您可以了解如何通过反复试验发送适当的参数。

        其他时候,您必须通过真实用户和浏览器获取身份验证参数,并将此信息作为标头或 cookie 发送到服务器。无论如何,您都需要仔细研究网站对其API提出的请求。

 

开发人员工具中的详细请求

        有时,弄清楚私有 API 的工作原理可能是一项复杂的任务,但如果您设法做到这一点。解析工作将简单得多,因为您将获得已经组织和结构化的信息,通常采用 JSON 格式。

10. 停止重复失败的尝试

        对于网站站长来说,最可疑的情况之一是看到大量失败的请求。最初,他们可能不会怀疑机器人是原因并开始调查。

        但是,如果他们因为机器人试图抓取他们的数据而检测到这些错误,他们将阻止您的网络抓取工具。这就是为什么最好检测并记录失败的尝试,并在发生暂停抓取时收到通知。

        这些错误通常是因为网站发生了更改。在继续数据抓取之前,您需要调整抓取工具以适应新的网站结构。这样,您将避免触发可能导致被阻止的警报。

三、结论

        如您所见,某些网站使用多种机制来阻止您抓取其内容。仅使用一种技术来避免被阻止可能不足以成功抓取。

        让我们回顾一下我们在这篇文章中看到的反块技巧:

防刮板块解决方法由 ZenRows 支持
请求数受 IP 限制轮换代理
数据中心 IP 被阻止高级代理
Cloudflare 和其他反僵尸系统避免可疑请求和逆向工程 JavaScript 挑战
浏览器指纹识别旋转无头浏览器
蜜罐陷阱跳过不可见链接和循环引用
可疑请求的验证码高级代理和类似用户的请求
始终在线的验证码验证码解决工具和服务

请记住,即使在应用这些提示后,您也可能被阻止。节省所有这些时间!

在ZenRows,我们使用这里讨论的所有反阻止技术以及更多内容。这就是为什么我们的网络抓取 API 每秒可以处理数千个请求而不会被阻止的原因。

最重要的是,我们甚至可以创建适合您需求的定制scraper。您今天可以免费试用。

四、附录:常见问题解答

        如何在不被阻止的情况下抓取网站?

        网站采用各种技术来防止机器人流量访问其页面。这就是为什么您在网络抓取时可能会遇到防火墙、等候室、JavaScript 挑战和其他障碍的原因。

        幸运的是,您可以通过尝试以下操作来最大程度地降低被阻止的风险:

  • 设置实际请求标头。
  • 使用代理。
  • 使用高级代理进行网页抓取。
  • 使用无头浏览器。
  • 智胜蜜罐陷阱。
  • 避免指纹识别。
  • 绕过反机器人系统。
  • 自动解决验证码。
  • 利用 API 发挥您的优势。
  • 停止重复失败的尝试。

        为什么不允许网页抓取?

        网页抓取是合法的,但并不总是允许的,因为即使是公开可用的数据也通常受版权法保护,并且需要书面授权才能用于商业用途。幸运的是,您可以遵循合理使用准则合法地抓取数据。

此外,网站可能包含受国际法规保护的数据,例如个人和机密信息,需要数据主体的明确同意。

        网站可以阻止您进行网页抓取吗?

        是的,如果网站检测到您的工具违反了其 robots.txt 文件中列出的规则或触发了反机器人措施,它将阻止您的抓取工具。

为了避免禁令,您可以采取的一些基本预防措施是使用具有轮换 IP 的代理,并确保您的请求标头看起来真实。此外,您的刮板应尽可能像人类一样运行,而不会太快地发送太多请求。

        为什么网站会阻止抓取?

网站有很多理由阻止机器人访问其页面。例如,许多公司出售数据,因此他们这样做是为了保护他们的收入。此外,针对黑客和未经授权的数据使用的安全措施禁止所有机器人,包括抓取工具。

另一个问题是,如果设计错误,抓取工具可能会使网站的服务器因请求而过载,从而导致金钱成本并破坏用户体验。

你觉得内容有帮助吗?传播这个词并在推特或LinkedIn上分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/61537.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Netty使用和常用组件辨析

Netty 使用和常用组件 简述 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId <version>4.1.42.Final </version> <scope>compile</scope> </dependency> Netty 的优势 1 、 AP…

总结 IO、存储、硬盘、文件系统相关常识

目录 一、IO是什么&#xff1f; 二、存储 三、硬盘 四、文件系统 4.1 文件目录和组织方式 4.2 文化路径 4.3 文件类型 4.4 文件系统操作 一、IO是什么&#xff1f; IO是英文Input/Output的缩写&#xff0c;指输入/输出。在计算机科学中&#xff0c;IO通常指计算机与外部设备或…

Pytest简介及jenkins集成

一、pytest介绍 pytest介绍 - unittest\nose pytest&#xff1a;基于unittest之上的单元测试框架 自动发现测试模块和测试方法 断言使用assert表达式即可 可以设置测试会话级、模块级、类级、函数级的fixtures 数据准备 清理工作 unittest&#xff1a;setUp、teardown、…

Maven可选依赖和排除依赖简单使用

可选依赖 可选依赖指对外隐藏当前所依赖的资源 在maven_04_dao的pom.xml,在引入maven_03_pojo的时候&#xff0c;添加optional <dependency><groupId>com.rqz</groupId><artifactId>maven_03_pojo</artifactId><version>1.0-SNAPSHOT&…

Spring Boot + Vue3前后端分离实战wiki知识库系统十一--文档管理功能开发三

文档内容的显示&#xff1a; 在上一次https://www.cnblogs.com/webor2006/p/17510360.html文档管理模块还差文档的显示木有完成&#xff0c;所以接下来先将这块模块给收尾了。 增加单独获取内容的接口&#xff1a; 概述&#xff1a; 在前端页面文档查询时&#xff0c;只查询了文…

WMS仓库管理系统研发规划说明

01 产品背景 1.1 背景概述 aboss WMS东南亚仓库管理系统是一个基于BigSeller系统的使用基础上&#xff0c;加上多仓库的解决思路&#xff0c;解决入库业务、出库业务、仓库调拨、库存调拨和虚仓管理等功能&#xff0c;对批次管理、物料对应、库存盘点、质检管理、虚仓管理和即…

Python爬虫的学习day02 requests 模块post 函数, lmxl 模块的 etree 模块

1. requests 模块post 函数 1.1 post 函数的参数 &#xff08;简单版&#xff09; 参数1&#xff1a; url 网络地址 参数2&#xff1a; data 请求数据 &#xff08;一般数据是 账号&#xff0c;密码&#xff09; 参数3&#xff1a; headers 头请求 &#xff08…

【分布式流控组件 Sentinel 快速入门】——图文详解操作流程

&#x1f4a7; 分布式流控组件 S e n t i n e l 快速入门 \color{#FF1493}{分布式流控组件 Sentinel 快速入门} 分布式流控组件Sentinel快速入门&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#…

springboot第34集:ES 搜索,nginx

#用search after解决深分页性能问题 #第一页 GET /bank/_search {"size": 10,"sort": [{"account_number": {"order": "asc"}}] }#第二页 GET /bank/_search {"size": 10,"sort": [{"account_numb…

《cuda c编程权威指南》05 - cuda矩阵求和

目录 1. 使用一个二维网格和二维块的矩阵加法 1.1 关键代码 1.2 完整代码 1.3 运行时间 2. 使用一维网格和一维块的矩阵加法 2.1 关键代码 2.2 完整代码 2.3 运行时间 3. 使用二维网格和一维块的矩阵矩阵加法 3.1 关键代码 3.2 完整代码 3.3 运行时间 1. 使用一个二…

Java ~ Collection/Executor ~ PriorityBlockingQueue【总结】

前言 相关系列 《Java ~ Collection【目录】》&#xff08;持续更新&#xff09;《Java ~ Executor【目录】》&#xff08;持续更新&#xff09;《Java ~ Collection/Executor ~ PriorityBlockingQueue【源码】》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;…

echarts 饼图的label放置于labelLine引导线上方

一般的饼图基础配置后长这样。 想要实现将文本放置在引导线上方&#xff0c;效果长这样 const options {// ...series: [{label: {padding: [0, -40],},labelLine: {length: 10,length2: 50,},labelLayout: {verticalAlign: "bottom",dy: -10,},},], };label.padd…

中国区域250米归一化植被指数数据集(2000-2022)介绍

一、归一化植被指数是什么&#xff1f; 归一化植被指数 (Normalized Difference Vegetation Index, NDVI) 是一种衡量地表植被绿度&#xff08;生物量&#xff09;的重要指标&#xff0c;它反映了植被对太阳辐射的吸收情况和光合作用的强度。该指数是通过对地面反射的近红外和可…

IDEA SpringBoot Maven profiles 配置

IDEA SpringBoot Maven profiles 配置 IDEA版本&#xff1a; IntelliJ IDEA 2022.2.3 注意&#xff1a;切换环境之后务必点击一下刷新&#xff0c;推荐点击耗时更短。 application.yaml spring:profiles:active: env多环境文件名&#xff1a; application-dev.yaml、 applicat…

【SpringCloud】Gateway服务网关

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 1.为什么需要网关…

从0到1开发go-tcp框架【4实战片— — 开发MMO之玩家聊天篇】

从0到1开发go-tcp框架【实战片— — 开发MMO】 MMO&#xff08;MassiveMultiplayerOnlineGame&#xff09;&#xff1a;大型多人在线游戏&#xff08;多人在线网游&#xff09; 1 AOI兴趣点的算法 游戏中的坐标模型&#xff1a; 场景相关数值计算 ● 场景大小&#xff1a; 250…

【ASP.NET MVC】使用动软(五)(13)

一、问题 前文完成的用户登录后的首页如下&#xff1a; 后续账单管理、人员管理等功能页面都有相同的头部&#xff0c;左边和下边&#xff0c;唯一不同的右边内容部分&#xff0c;所以要解决重复设计的问题。 二、解决方法——使用布局页 在Views上右键添加新建项&#xff…

CentOS7---部署Tomcat和安装Jpress

总览需求 1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。1、简述静态网页和动态网页的区别 静态网页&#xff1a; 请求响应信息&#xff0c;发给客户端进行处理&#xff0c…

Mysql字符集问题整理

0.概述 MySQL的字符集支持(Character Set Support)包括两个方面&#xff1a; 字符集(Character set)和排序方式(Collation)。 对于字符集的支持细化到四个层次: 服务器(server)&#xff0c;数据库(database)&#xff0c;数据表(table)和连接(connection)。1.MySQL…

Python:Spider爬虫工程化入门到进阶(2)使用Spider Admin Pro管理scrapy爬虫项目

Python&#xff1a;Spider爬虫工程化入门到进阶系列: Python&#xff1a;Spider爬虫工程化入门到进阶&#xff08;1&#xff09;创建Scrapy爬虫项目Python&#xff1a;Spider爬虫工程化入门到进阶&#xff08;2&#xff09;使用Spider Admin Pro管理scrapy爬虫项目 目录 1、使…