- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想防止网络抓取工具在我的网站上主动抓取 1,000,000 个页面。我想通过向每分钟访问异常页数的机器人返回“503 服务不可用”HTTP 错误代码来做到这一点。我对表单垃圾邮件发送者没有问题,只是在使用爬虫。
我不希望搜索引擎蜘蛛收到错误。我的倾向是设置一个 robots.txt crawl-delay,这将确保蜘蛛在我的 503 阈值下每分钟访问一些页面。
这是一个可以接受的解决方案吗?是否所有主要搜索引擎都支持 crawl-delay 指令?它会对SEO产生负面影响吗?有没有其他解决方案或建议?
最佳答案
我已经构建了一些爬虫,花费最长时间的部分总是试图弄清楚站点布局应该刮什么而不是什么。我可以告诉你的是,改变 div 和内部布局对所有刮刀来说都是毁灭性的。就像 ConfusedMind 已经指出的那样。
所以这里有一个小文字给你:
限速
对 IP 进行速率限制意味着在阻止它之前,您只允许该 IP 在固定时间范围内进行一定数量的搜索。这似乎是防止最严重的罪犯的可靠方法,但实际上并非如此。问题是您的大部分用户可能来自代理服务器或大型企业网关,他们经常与成千上万的其他用户共享这些网关。如果您对代理的 IP 进行速率限制,那么当来自代理的不同用户使用您的站点时,该限制很容易触发。仁慈的机器人也可能以比正常情况更高的速度运行,从而触发您的限制。
一种解决方案当然是使用白名单,但问题是您需要不断手动编译和维护这些列表,因为 IP 地址会随着时间而变化。毋庸置疑,一旦数据抓取器意识到您正在限制某些地址的速率,它们只会降低其速率或通过更多 IP 分配搜索。
为了使速率限制有效并且不妨碍网站的大用户,我们通常建议在阻止他们之前调查每个超过速率限制的人。
验证码测试
验证码测试是一种尝试阻止网站抓取的常用方法。这个想法是让图片显示一些机器无法读取但人类可以读取的文本和数字(见图)。这种方法有两个明显的缺点。首先,如果用户必须填写多个,验证码测试可能会让用户感到厌烦。其次,网络爬虫可以轻松地手动进行测试,然后让他们的脚本运行。除此之外,验证码测试的几个大用户的实现也受到了损害。
混淆源代码
一些解决方案试图混淆 http 源代码,使机器更难阅读它。这种方法的问题在于,如果 Web 浏览器可以理解混淆的代码,那么任何其他程序也可以。混淆源代码也可能会干扰搜索引擎如何查看和处理您的网站。如果您决定实现此操作,则应非常小心。
黑名单
由已知用于抓取站点的 IP:s 组成的黑名单本身并不是一种真正的方法,因为您仍然需要先检测抓取器才能将其列入黑名单。即便如此,它仍然是一种钝器,因为 IP 往往会随着时间而改变。最后,您最终将使用此方法阻止合法用户。如果您仍决定实现黑名单,则应制定至少每月审查一次的程序。
关于web-scraping - 这种反抓取技术是否适用于 Robots.txt Crawl-Delay?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945698/
asyncio.sleep() 的阻塞表亲,time.sleep() , 不能保证它会在请求的时间内休眠。 The actual suspension time may be less than th
在 C# 中,我有以下两个简单示例: [Test] public void TestWait() { var t = Task.Factory.StartNew(() => {
这是一个 linqpad 示例,展示了在短暂延迟后异步执行方法的两种方法。这两个例子似乎做了完全相同的事情。我通常会实现第一个版本(使用 Task.Delay.ContinueWith),但我也看到使
这是一个 linqpad 示例,展示了在短暂延迟后异步执行方法的两种方法。这两个例子似乎做了完全相同的事情。我通常会实现第一个版本(使用 Task.Delay.ContinueWith),但我也看到使
使用 jQuery,我逐渐将“go”类添加到 div div { tranform:translate(20px,20px); opacity:0;
期待: 当 audioplayer.play(atTime: 1) 被调用时,定时器重置为 0,音频播放器在第 1 秒播放 现实: 我试过 delay = 0.000000001, 1, 100000
我一直在阅读 .Net 4.5 中引入的 async/await 语法并对其有所了解。 我找到了简单的示例,其中 Task.Yield 是要走的路,而不是 Application.DoEvents。我
我需要在一个延迟很大的系统中调整PI(D)的增益。这是一个常见的温度 Controller ,但温度探头距离加热器较远。一些进一步的信息: 加热器响应上的任何变化,探头的响应都会延迟约10秒 温度以1
代码很短,但是很经典,单位是秒,就是未测试过服务器资源消耗怎么样: <% Function Delay(s)
为什么这会立即清空文本(忽略延迟)? $('#error_box_text').html('error text').delay(5000).html('') # jQuery 1.4 最佳答案 de
我有一个 $image,我 .fadeIn 和 .fadeOut,然后 .remove .fadeOut 完成。这是我的代码: $image .fadeIn() .fadeOut(func
我希望用户将鼠标悬停在对撞机(只是一个透明矩形)上超过 2 或 3 秒时能够看到描述菜单。我目前正在使用 javaFX 扩展。 我将程序设置为每当我将鼠标悬停在对撞机上时,它都会播放声音效果,但我希望
在我创建的几个 .HTA 脚本中,我需要 VBScript WScript.Sleep 命令,它只是等待几毫秒而不使用 CPU。当我浏览网页时,似乎我不是唯一一个在寻找这个的人: https://ww
我在 javaFX 中创建了一些节点。我需要为每个节点设置动画,以便使用 TranslateTransition 在 Pane 中的某个点到某个点之间进行转换。但我需要使每个节点使用不同的起点独立移动
我需要在用户开始触摸屏幕、移动手指然后结束触摸时执行一些操作。触摸开始工作正常,也可以移动,但触摸结束运行有 0.5-1 秒的延迟。下面有一段代码: -(id) init { if (s
我正在寻找有关 jQuery 的 .delay 函数的帮助。我的网站上有一个弹出表单,我想在 2-3 分钟内随机弹出该表单。我了解如何使用 Math.random(),但我不了解如何使用它生成 120
我无法获取一些 javascript 和 Jquery 来延迟适当的时间。我想更改一些文本,请等待 5 秒钟,然后弹出警报。 代码如下: $('#result').html("Record has p
我有以下 JavaScript 片段: $("#dashboard").addClass("standby").delay(3000).removeClass("standby"); $(".acti
我有以下 JavaScript 片段: $("#dashboard").addClass("standby").delay(3000).removeClass("standby"); $(".acti
我已经编写了一个简单的 jQuery 淡入淡出插件,但我无法让延迟正常工作。它将在第一个项目上起作用,但之后它会被忽略 jQuery (function ($) { $.fn.setupQuo
我是一名优秀的程序员,十分优秀!