有哪些有趣的反爬虫机制吗?

陈良昱


IP

网站检测网络抓取活动的最简单方法之一是通过IP跟踪。该网站可以根据其行为识别IP是否是机器人。当网站发现定期 或在 短时间内 从单个 IP地址 发送了 大量请求 时, 很有可能该IP被阻止,因为它被怀疑是机器人。在这种情况下,构建一个防爬虫真正重要的是 每单位时间的访问次数 和 访问频率。这是您可能会遇到的一些情况。

方案1:几秒钟内进行多次访问。真正的人无法快速浏览。因此,如果您的搜寻器频繁向网站发送请求,则该网站肯定会阻止将该IP识别为机器人的IP。

解决方案:降低爬虫速度。在执行或增加两个步骤之间的等待时间之前设置延迟时间(例如“睡眠”功能)将始终有效。

方案2:以完全相同的速度访问网站。真实的人类不会一遍又一遍地重复相同的行为模式。一些网站会监视请求的频率,如果以完全相同的模式(例如每秒一次)定期发送请求,则很可能会激活防抓取机制。

解决方案:为搜寻器的每个步骤设置随机延迟时间。以随机的抓取速度,爬虫的行为将更像人类浏览网站的方式。

方案3:某些高级防爬技术将采用复杂的算法来跟踪来自不同IP的请求并分析其平均请求。如果IP的请求异常,例如每天发送相同数量的请求或在同一时间访问相同的网站,则会被阻止。

解决方案:定期更改您的IP。大多数VPN服务,云服务器和代理服务都可以提供轮换IP。通过这些旋转的IP发送请求时,爬网程序的行为不像漫游器,这可以减少被阻止的风险。

登录

许多网站,尤其是诸如Twitter和Facebook之类的社交媒体平台,仅在您登录网站后才向您显示信息。为了对此类站点进行爬网,爬网程序还需要模拟日志记录步骤。

登录网站后,搜寻器需要保存cookie。Cookie是一小段数据,用于存储用户的浏览数据。如果没有Cookie,该网站会忘记您已经登录,并要求您再次登录。

此外,某些具有严格抓取机制的网站可能仅允许部分访问数据,例如即使登录后每天也有1000行数据。

您的漫游器需要知道如何登录

1)模拟键盘和鼠标操作。搜寻器应模拟登录过程,其中包括使用鼠标单击文本框和“登录”按钮,或使用键盘输入帐户和密码信息的步骤。

2)首先登录,然后保存 cookie。对于允许cookie的网站,他们会通过保存cookie来记住用户。有了这些Cookie,您无需在短期内再次登录该网站。由于采用了这种机制,您的搜寻器可以避免繁琐的登录步骤,并且无需收集所需的信息。

3)不幸的是,如果遇到上述严格的转义机制,则可以安排抓取工具以固定频率(例如每天一次)来监视网站。计划搜寻器在一段时间内抓取最新的1000行数据并累积最新的数据。

UA

UA代表的是User-Agent,它是网站的标头,用于识别用户的访问方式。它包含诸如操作系统及其版本,CPU类型,浏览器及其版本,浏览器语言,浏览器插件等信息。

UA示例:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_7_0)AppleWebKit / 535.11(KHTML,例如Gecko)Chrome / 17.0.963.56 Safari / 535.11

抓取网站时,如果您的搜寻器不包含标题,则只会将其自身标识为脚本(例如,如果使用python来构建搜寻器,则它将自身声明为python脚本)。网站肯定会阻止脚本发出的请求。在这种情况下,搜寻器必须伪装成带有UA标头的浏览器,以便网站可以为其提供访问权限。

有时,即使您输入具有相同URL的网站,网站也会向不同的浏览器或不同的版本显示不同的页面或信息。机会是与一个浏览器兼容而其他浏览器被阻止的信息。因此,为了确保您可以进入正确的页面,将需要多个浏览器和版本。

在不同的UA之间切换以避免被阻止

更改UA信息,直到找到正确的信息。如果长时间使用相同的UA,则应用了复杂的防爬网技术的某些敏感网站甚至可能阻止访问。在这种情况下,您需要定期更改UA信息。

5.AJAX

如今,更多的网站是使用AJAX开发的,而不是传统的Web开发技术。AJAX代表异步JavaScript和XML,这是一种异步更新网站的技术。简而言之,当页面内仅进行少量更改时,无需重新加载整个网站。

那么您怎么知道一个网站是否适用AJAX?

没有AJAX的网站:即使您仅在网站上进行了很小的更改,整个页面也会被刷新。通常,会出现加载符号,并且URL会更改。对于这些网站,我们可以利用该机制并尝试找到URL更改方式的模式。然后,您可以批量生成URL,并直接通过这些URL提取信息,而不必教您的爬虫如何导航类似人类的网站。

带有AJAX的网站:仅更改您单击的位置,并且不会出现加载标志。通常,Web URL不会更改,因此搜寻器必须以直接的方式进行处理。

对于AJAX开发的某些复杂网站,将需要特殊的技术来找出那些网站上独特的加密方式并提取加密数据。解决此问题可能很耗时,因为加密的方式在不同的页面上会有所不同。如果您可以找到带有内置JS操作的浏览器,那么它可以自动解密网站并提取数据。


大魔王Hacker


说下我以前爬某电影评分网站时遇到的反爬机制吧,感觉还挺有趣的。

爬数据时遇到的问题

首先来说说我在爬数据时遇到的问题,看图:

页面上正确显示了评分为9.5,按F12打开调试模式,找到该元素节点时发现显示的是两个框框,再打开源码发现是一串乱码。

页面数字显示正常,在源码中却显示乱码,可以肯定该网站肯定采取了反爬虫机制,有点意思!

反爬虫机制原理

下面分析一下这个反爬虫机制的原理。

做过web前端开发的人知道显示框框一般都是由于引用了字体文件引起,那么这个网站反爬虫机制会不会跟字体文件有关呢?

刷新一下页面,发现一个字体文件的请求:

我们手动将这个字体文件下载下来,使用字体编辑工具打开:

虽然我不是太懂字体文件的原理,但是按我的理解其实就是一个字符和数字关系映射文件,例如字符E282对应数字9、字符F11B对应数字5。

现在我们再来看一下源码里的乱码:

有没有看出什么端倪?

是的,它们并不是什么乱码,而是而字体文件里的字符一一对应的!

根据对应关系可以推断出乱码“.”对应数字9.5,正好和页面上显示的是一致的。

总结

这个反爬虫机制的现象是页面显示数字正常,但是源码里显示乱码;这个反爬虫机制的工作原理就是通过字体文件将乱码和数字建立好映射关系。


分享到:


相關文章: