如何检查是否正在从爬虫或触发连续请求的脚本访问某个页面? 我需要确保只能从Web浏览器访问该站点。 感谢。
答案 0 :(得分:2)
这个问题是一个很好的起点: Detecting 'stealth' web-crawlers
原帖:
这需要一点时间来设计解决方案。
我可以想到要立即寻找的三件事:
一,用户代理。如果蜘蛛是google或bing或其他任何东西,它将识别它的自我。
其二,如果蜘蛛是恶意的,它很可能会模仿普通浏览器的标头。指纹,如果它是IE。使用JavaScript检查活动的X对象。
三,注意它的访问内容以及访问频率。如果内容需要查看平均人类X秒数,那么您可以在尝试确定是否可以快速消耗数据时将其用作开始的位置。这很棘手,你很可能不得不依赖cookie。多个用户可以共享IP。
答案 1 :(得分:1)
您可以使用robots.txt文件来阻止对抓取工具的访问,也可以使用javascript来检测浏览器代理,并根据它进行切换。如果我理解第一个选项更合适,那么:
User-agent: *
Disallow: /
将其保存为站点根目录下的robots.txt,并且自动系统不应检查您的站点。
答案 2 :(得分:1)
我的网络应用程序中存在类似的问题,因为我在数据库中为浏览到网站的每个用户创建了一些庞大的数据,并且爬虫正在激发大量无用的数据被创建。但是我不想拒绝访问爬虫,因为我希望我的网站被索引并找到;我只是想避免创建无用的数据并减少爬行所需的时间。
我通过以下方式解决了问题:
首先,我使用了.NET Framework中的HttpBrowserCapabilities.Crawler属性(自2.0开始),该属性指示浏览器是否是搜索引擎Web爬网程序。您可以从代码中的任何位置访问它:
ASP.NET C#代码背后:
bool isCrawler = HttpContext.Current.Request.Browser.Crawler;
ASP.NET HTML:
Is crawler? = <%=HttpContext.Current.Request.Browser.Crawler %>
ASP.NET Javascript:
<script type="text/javascript">
var isCrawler = <%=HttpContext.Current.Request.Browser.Crawler.ToString().ToLower() %>
</script>
这种方法的问题在于它对于未识别或屏蔽的爬虫并非100%可靠,但可能对您的情况有用。
之后,我必须找到一种方法来区分自动机器人(爬虫,屏幕刮刀等)和人类,我意识到解决方案需要某种交互性,例如点击按钮。好吧,有些抓取工具会处理 javascript ,很明显他们会使用按钮元素的onclick事件,但如果它是非交互式元素,例如 DIV 。以下是我在我的网络应用程序www.so-much-to-do.com中用于实现此功能的HTML / Javascript代码:
<div
class="all rndCorner"
style="cursor:pointer;border:3;border-style:groove;text-align:center;font-size:medium;font-weight:bold"
onclick="$TodoApp.$AddSampleTree()">
Please click here to create your own set of sample tasks to do
</div>
到目前为止,这种方法一直无可挑剔,尽管可以在阅读本文之后将爬虫变得更加聪明:D