如何应对网站反爬虫策略?如何高效地爬大量数据
一些常用的方法
IP代理
对于IP代理,各个语言的Native Request API都提供的IP代理响应的API, 需要解决的主要就是IP源的问题了.
网络上有廉价的代理IP(1元4000个左右), 我做过简单的测试, 100个IP中, 平均可用的在40-60左右, 访问延迟均在200以上.
网络有高质量的代理IP出售, 前提是你有渠道.
因为使用IP代理后, 延迟加大, 失败率提高, 所以可以将爬虫框架中将请求设计为异步, 将请求任务加入请求队列(RabbitMQ,Kafka,Redis), 调用成功后再进行回调处理, 失败则重新加入队列. 每次请求都从IP池中取IP, 如果请求失败则从IP池中删除该失效的IP.
Cookies
有一些网站是基于cookies做反爬虫, 这个基本上就是如 @朱添一 所说的, 维护一套Cookies池
注意研究下目标网站的cookies过期事件, 可以模拟浏览器, 定时生成cookies
限速访问
像开多线程,循环无休眠的的暴力爬取数据, 那真是分分钟被封IP的事, 限速访问实现起来也挺简单(用任务队列实现), 效率问题也不用担心, 一般结合IP代理已经可以很快地实现爬去目标内容.
一些坑
大批量爬取目标网站的内容后, 难免碰到红线触发对方的反爬虫机制. 所以适当的告警提示爬虫失效是很有必有的.
一般被反爬虫后, 请求返回的HttpCode为403的失败页面, 有些网站还会返回输入验证码(如豆瓣), 所以检测到403调用失败, 就发送报警, 可以结合一些监控框架, 如Metrics等, 设置短时间内, 告警到达一定阀值后, 给你发邮件,短信等.
当然, 单纯的检测403错误并不能解决所有情况. 有一些网站比较奇葩, 反爬虫后返回的页面仍然是200的(如去哪儿), 这时候往往爬虫任务会进入解析阶段, 解析失败是必然的. 应对这些办法, 也只能在解析失败的时候, 发送报警, 当告警短时间到达一定阀值, 再触发通知事件.
当然这个解决部分并不完美, 因为有时候, 因为网站结构改变, 而导致解析失败, 同样回触发告警. 而你并不能很简单地区分, 告警是由于哪个原因引起的.
2024-03-16 广告
2018-11-10
2020-08-14 · 百度认证:江苏艾迪信息科技官方账号
通常我们在使用爬虫数据信息,会遇到ip遭受限制,采集目标做了一些防止信息流失的措施,叫反爬虫限制,如果绕开反爬机制的方法?反爬虫大家都知道,随着爬虫应用的广泛,反爬虫也走入了我们的生活。爬虫在抓取数据的时候,可能会给目标网站服务器带来很大的影响,所以现在网站都有反爬虫技术来应对爬虫,而反爬虫的主要方式就是通过IP限制。
如何解决限制的方法:
1. 根据ADSL拨号换IP,每重新拨号就会有新的IP产生,也能解决IP限制的问题。
2. 如果是局域网的环境,带路由器的,第一种方法就不能用了。这时可以重启路由器换IP。
3.通过使用http,解决IP限制的问题。有着海量全球高匿IP 网络资源的ipidea,分布国家地区达到240+,保证质量IP的纯净度和稳定性。
1、通过UA判断:UA是UserAgent,是要求浏览器的身份标志。
UA是UserAgent,是要求浏览器的身份标志。反爬虫机制通过判断访问要求的头部没有UA来识别爬虫,这种判断方法水平很低,通常不作为唯一的判断标准。反爬虫非常简单,可以随机数UA。
2、通过Cookie判定:Cookie是指会员帐户密码登录验证
Cookie是指会员帐户密码登录验证,通过区分该帐户在短时间内爬行的频率来判断。这种方法的反爬虫也很困难,需要多账户爬行。
3、通过访问频率判定
爬虫类经常在短时间内多次访问目标网站,反爬虫类机制可以通过单个IP访问的频率来判断是否是爬虫类。这样的反爬方式难以反制,只能通过更换IP来解决。
4、通过验证码判定
验证码是反爬虫性价比高的实施方案。反爬虫通常需要访问OCR验证码识别平台,或者使用TesseractOCR识别,或者使用神经网络训练识别验证码。
5、动态性页面加载
使用动态加载的网站通常是为了方便用户点击和查看,爬虫无法与页面互动,这大大增加了爬虫的难度。
一般情况下,用户对网站进行信息爬取时,都要受到“爬虫”的约束,使用户在获取信息时受到一定的阻碍
(1)IP 限制
IP 限制是很常见的一种反爬虫的方式。服务端在一定时间内统计 IP 地址的访问 次数,当次数、频率达到一定阈值时返回错误码或者拒绝服务。这种方式比较直接 简单,但在 IPv4 资源越来越不足的情况下,很多用户共享一个 IP 出口,典型的如“长 城宽带”等共享型的 ISP。另外手机网络中的 IP 地址也是会经常变化的,如果对这 些 IP 地址进行阻断,则会将大量的正常用户阻止在外。
对于大多数不需要登录就可以进行访问的网站,通常也只能使用 IP 地址进行限 制。比如“Freelancer 网站”,大量的公开数据可以被访问,但同一个 IP 地址的访问 是有一定的限制的。针对 IP 地址限制非常有效的方式是,使用大量的“高匿名”代 理资源。这些代理资源可以对源 IP 地址进行隐藏,从而让对方服务器看起来是多个 IP 地址进行访问。另一种限制方式是,根据业务需要,对国内、国外的 IP 地址进行 单独处理,进而对国外的高匿名代理进行阻断,例如使用海外的 IP 地址访问“天眼 查网站”则无法访问。
(2)验证码
验证码是一种非常常见的反爬虫方式。服务提供方在 IP 地址访问次数达到一定 数量后,可以返回验证码让用户进行验证。这种限制在不需要登录的网页界面比较 常见,它需要结合用户的 cookie 或者生成一个特殊标识对用户进行唯一性判断,以 防止同一个 IP 地址访问频率过高。验证码的存在形式非常多,有简单的数字验证码、 字母数字验证码、字符图形验证码,网站也可以用极验验证码等基于用户行为的验 证码。针对简单验证码,可以使用打码平台进行破解。这种平台通过脚本上传验证 的图片,由打码公司雇用的人工进行识别。针对极验验证等更复杂的验证码,可以尝试模拟用户的行为绕过去,但通常比较烦琐,难度较大。谷歌所用的验证码更为 复杂,通常是用户端结合云端进行手工打码,但会带来整体成本较高的问题。要想绕过这些验证码的限制,一种思路是在出现验证码之前放弃访问,更换 IP 地址。ADSL 拨号代理提供了这种可能性。ADSL 通过拨号的方式上网,需要输入 ADSL 账号和密码,每次拨号就更换一个 IP 地址。不同地域的 IP 地址分布在多个地 址段,如果 IP 地址都能使用,则意味着 IP 地址量级可达千万。如果我们将 ADSL 主机作为代理,每隔一段时间主机拨号一次(换一个 IP),这样可以有效防止 IP 地 址被封禁。这种情况下,IP 地址的有效时限通常很短,通常在 1 分钟以下。结合大 量的 ADSL 拨号代理可以达到并行获取大量数据的可能。如果网站使用了一些特殊 的唯一性的标识,则很容易被对方网站识别到,从而改进反爬虫策略,面对这种情 况,单独切换 IP 地址也会无效。遇到这种情况,必须要搞清楚标识的生成方式,进 而模拟真实用户的访问。
(3)登录限制
登录限制是一种更加有效的保护数据的方式。网站或者 APP 可以展示一些基础的数据,当需要访问比较重要或者更多的数据时则要求用户必须登录。例如,在天 眼查网站中,如果想要查看更多的信息,则必须用账号登录;“知乎”则是必须在登 录后才能看到更多的信息。登录后,结合用户的唯一标识,可以进行计数,当访问 频度、数量达到一定阈值后即可判断为爬虫行为,从而进行拦截。针对“登录限制” 的方法,可以使用大量的账号进行登录,但成本通常比较高。
代理服务器是爬虫工具的基本武器,既可以隐藏真实的访问来源,又可以绕过 大部分网站都会有的 IP 地址的访问频度的限制。常见的代理有 HTTP 代理和 HTTPS 代理两种,根据匿名程度的不同,可以将代理级别分为以下 5 种。
(1)高匿名代理
高匿名代理会将数据包原封不动地转发,从服务端来看,就像是真的一个普通客户端在访问,而记录的 IP 地址是代理服务器的 IP 地址,可以对很好地隐藏访问源, 所以这种代理为爬虫工具首选。
(2)普通匿名代理
普通匿名代理会在数据包上做一些改动,代理服务器通常会加入的 HTTP 头有 HTTP_VIA 和 HTTP_X_FORWARDED_FOR 两种。根据这些 HTTP 头,服务端可以发现这是一个代理服务器,并且可以追踪到客户端的真实 IP 地址。
(3)透明代理
透明代理不仅改动了数据包,还会告诉服务器客户端的真实 IP 地址,因此在抓 取数据时应该避免使用这种代理服务器。
网上有一些免费代理列表网站会定期扫描互联网,从而获取一些代理服务器的信息,然后将这些信息公布出来。这些代理服务器的有效期可能比较短,也容易被滥用,质量通常较差,所以需要客户端自己筛选出可用的代理。
在代理的种类上,HTTP 代理多,HTTPS 代理较少。在互联网倡导 HTTPS 的 趋势下,单纯使用 HTTP 代理是无法访问 HTTPS 网址的。大部分往往网站会同时保留 HTTPS 和 HTTP 的访问,所以可以试着将 HTTPS 网址改为 HTTP(协议),一个 原则是,如果网站的 HTTP 可以用,则不要使用 HTTPS。原因是 HTTPS 需要多次握 手,速度比较慢,经过代理之后会显得更慢。HTTP 则会快很多,而且代理服务器可选资源较多
网络上存在着大量的代理列表可以免费获取,虽然有效性通常少于 10%,但基于庞大的数量(通常每日可获得上万个),也会有近千个代理可以用。在 GitHub 上 有很多抓取这类代理的项目