6

如何配置我的网站以允许从谷歌、必应、雅虎、alexa 等知名机器人抓取并阻止其他有害垃圾邮件发送者、机器人

我应该阻止特定的IP吗?请讨论任何优点,缺点 在 web.config 或 IIS 中要做什么?

如果我有具有 root 访问权限的 vps,我可以在服务器范围内进行吗?

谢谢。

4

4 回答 4

8

我建议您查看我发布的类似问题的答案:如何识别网络爬虫?

Robots.txt
robots.txt 对于有礼貌的机器人很有用,但垃圾邮件发送者通常不礼貌,因此他们倾向于忽略 robots.txt;如果您有 robots.txt,那就太好了,因为它可以帮助有礼貌的机器人。但是,请注意不要阻止错误的路径,因为它会阻止好的机器人抓取您真正希望它们抓取的内容。

用户代理
阻止用户代理也不是万无一失的,因为垃圾邮件发送者经常冒充浏览器和其他流行的用户代理(例如谷歌机器人)。事实上,欺骗用户代理是垃圾邮件发送者可以做的最简单的事情之一。

机器人陷阱
这可能是保护自己免受不礼貌且无法正确识别用户代理的机器人的最佳方法。至少有两种类型的陷阱:

  • robots.txt 陷阱(仅当机器人读取 robots.txt 时才有效):在 robots.txt 中指定一个禁区目录,并设置您的服务器以阻止任何试图访问该目录的实体的 IP 地址。
  • 在您的网页中创建“隐藏”链接,这些链接也会导致被禁止的目录,任何爬取这些链接并且不遵守您的 robots.txt 的机器人都会进入陷阱并阻止 IP。

隐藏链接是对人不可见的链接,例如没有文本的锚标记:<a href="http://www.mysite.com/path/to/bot/trap"></a>。或者,您可以在锚标记中包含文本,但您可以使字体非常小并更改文本颜色以匹配背景颜色,这样人们就看不到链接。隐藏链接陷阱可以捕获任何非人类机器人,所以我建议您将它与 robots.txt 陷阱结合起来,这样您就只会捕获坏机器人。

验证机器人
上述步骤可能会帮助您摆脱 99.9% 的垃圾邮件发送者,但可能会有少数恶意机器人冒充流行的机器人(例如 Googlebot)并遵守您的 robots.txt;这些漫游器会占用您为 Googlebot 分配的请求数量,并可能导致您暂时禁止 Google 抓取您的网站。在这种情况下,您还有一个选择,那就是验证机器人的身份。大多数主要的爬虫(你想被爬取)都有一种方法可以识别他们的机器人,这里是谷歌关于验证他们的机器人的建议:http: //googlewebmastercentral.blogspot.com/2006/09/how-to -验证-googlebot.html

Any bot that impersonates another major bot and fails verification can be blocked by IP. That should probably get you closer to preventing 99.99% of the bad bots from crawling your site.

于 2012-05-29T19:05:01.937 回答
1

通过 IP 阻止可能很有用,但我使用的方法是通过用户代理阻止,这样您就可以使用您不想要的应用程序捕获许多不同的 IP,尤其是站点抓取器。我不会提供我们的清单,因为您需要专注于影响您的那些。对于我们的使用,我们已经确定了 130 多个不是网络浏览器和搜索引擎的应用程序,我们不想访问我们的网络。但是您可以从用户代理的网络搜索开始,以获取站点。

于 2012-05-29T06:35:21.547 回答
0

最简单的方法是使用网站根目录中的 robots.txt 文件。

robots.txt 文件的语法如下:

User-agent: *
Disallow: /

这实际上禁止所有遵守 robots.txt 约定的机器人从定义的页面。

不过要记住的是,并非所有网络爬虫都遵守此约定

它可以非常有用地防止机器人疯狂地多次访问服务器,它也可以用于防止一些你希望根本不接触网站的机器人,但不幸的是它不是万能的。正如已经提到的,没有这样的动物,垃圾邮件是一个经常令人头疼的问题。

有关更多信息,请查看http://www.robotstxt.org/

于 2012-05-29T10:21:40.330 回答
0

I like to use the .htaccess file, once you have a list of known bots add these lines to the bottom of your file.

RewriteCond %{HTTP_REFERER} ^http(s)?://([^.]+.)suspectIP.$ [NC,OR]

RewriteCond %{HTTP_REFERER} ^http(s)?://([^.]+.)suspectURL.com.$ [NC]

RewriteRule (.*) - [F]

于 2015-05-02T17:49:55.070 回答