我使用的是非常昂贵的API。每次通话费用约为1美分。我注意到来自蜘蛛和爬虫的访问产生了数千个对该API的调用,我正在为它们付费。有没有办法阻止显示该API生成的内容的网页部分,只有实际的访问者才能看到它,并且在抓取网页时不会生成API调用?
答案 0 :(得分:0)
您可以在前端执行API调用,而不是在服务器端执行。例如,在页面加载期间,向服务器发出一个AJAX请求,该请求将调用API并返回数据。
据推测,蜘蛛和爬虫只是解析源代码并且不执行JS,因此他们不会执行AJAX请求而且您不会被收费。但是,如果您的某些访问者没有启用JS,那么您应该为他们提供一种获取结果的方法。
除此之外,如果你想降低成本,你可以做的是实现一个缓存系统,这样你就不会连续多次对API进行相同的调用。您可以根据新数据的关键性定义缓存时间。
答案 1 :(得分:0)
有许多方法可以阻止抓取工具抓取您的网站/特定网页。问题是您需要定义要阻止哪种类型的爬网程序,因为它们有很多类型。作为一个起点,Google& Bing不尊重robots.txt设置爬网延迟(您可以通过在其信息中心中手动更改此设置来更改抓取速度)。
正如你所提到的,你正在使用PHP,如果你使用的是Apache,那么你可以尝试使用Apache访问日志 - 它会记录Apache收到的所有请求 - 分析日志文件,你可以使用哪些爬虫来完成所有流量正在谈论(当你知道哪些抓取工具通过使用阻止他们使用.htaccess文件来解决你可以杀死哪一个繁忙的流量时 - 你可以将来自特定IP地址或用户代理的Web请求重定向到403 http错误或任何所需的重定向输出)
答案 2 :(得分:0)
我想出了这个,但仍在寻找更好的想法:
<?php
if (preg_match('/slurp|inktomisearch|[Gg]rub|[Bb]ot|archiver|[Ss]qworm/', $_SERVER['HTTP_USER_AGENT'])) {
include("no-api-call.php");
} else {
include("yes-api-call.php");
}
?>