【发布时间】:2015-07-06 07:01:58
【问题描述】:
我将速率定义为每单位时间的 HTTP 请求数。
我不知道我会在多长时间后被阻止(例如每天 1000 个请求)。我正在尝试确定任何网址的此费率。我怎样才能做到这一点?我可以采用什么策略?
【问题讨论】:
标签: web-scraping scrapy rate-limiting
我将速率定义为每单位时间的 HTTP 请求数。
我不知道我会在多长时间后被阻止(例如每天 1000 个请求)。我正在尝试确定任何网址的此费率。我怎样才能做到这一点?我可以采用什么策略?
【问题讨论】:
标签: web-scraping scrapy rate-limiting
这取决于您正在抓取的网站。有时它会记录在某处,但很可能不会。在这种情况下,API 会更好。
所以我建议尝试和错误并在你的抓取中添加一些暂停,不要让 Scrapy 运行太快而不会被阻塞(或者使用自定义抓取器,你可以将抓取速度限制在你的速度而不是 Scrapy )。
【讨论】:
我建议你一个简单的 php 脚本:
<?php
$url='<site url>';
$page = file_get_contents($url);
mail('<your email>', "scrape {$url} response size = " . strlen($page) , '');
?>
通过cron 设置脚本,以一天的初始最低费率运行。说,每20分钟。一天之内它将运行24 * 60/20 = 72(次)。
每 20 分钟将向您发送一封邮件,邮件大小为脚本抓取的网站大小。第二天你更频繁地运行它(每 15 分钟)等等。
如果尺寸发生剧烈变化(减小),则表明您有刮擦阻塞的迹象。这将是一个近似的阻塞刮擦率。
【讨论】: