在perl脚本中禁止403

时间:2013-08-28 09:07:07

标签: perl http-status-code-403 www-mechanize

我正在尝试通过使用Perl Mechanize来搜索和查找网站上的内容。在开始执行后,我很快就得到了 403 Forbidden 而不是搜索结果,

$m = WWW::Mechanize->new();
$url="http://site.com/search?q=$keyword";
$m->get($url);
$c = $m->content;
print "$c";`

怎样才能解决这个问题。请给我一些建议。

1 个答案:

答案 0 :(得分:0)

在开始抓取网站之前,您应该确保您有权这样做。大多数网站都有服务条款(TOS),其中列出了如何使用该网站。大多数网站都不允许自动访问,并对知识产权施加了很大限制。

网站可以在三个级别上防范不需要的访问:

  • 约定: /robots.txt几乎每个网站都应该受到您的计划的尊重。不要认为你正在使用的图书馆会处理这个问题;尊重robots.txt是您的责任。以下摘自stackoverflow robots.txt

    User-Agent: *
    Disallow: /ask/
    Disallow: /questions/ask/
    Disallow: /search/
    

    所以看起来SO不喜欢机器人提问或使用网站搜索。谁会想到?

    预计开发人员还将使用API​​和类似服务来访问内容。例如。 Stackoverflow具有可自定义的RSS源,已发布数据库快照,甚至可以使用online interface for DB queriesAPI

  • 法律:(IANAL!)在访问网站以获取除个人即时消费之外的任何内容之前,您应阅读服务条款或其他任何内容。它们说明您是否以及如何访问该站点并重用内容。请注意,所有内容都有一些版权。版权制度实际上是全球性的,因此您不能仅仅因为在网站所有者以外的其他国家/地区而免于服务条款。

    您通过使用网站(无论如何)隐式接受服务条款。

    有些网站会将内容许可给所有人。很好的例子是维基百科和Stackoverflow,它根据CC-BY-SA许可用户提交的内容(或者更确切地说,提交用户根据此许可证将其内容许可到网站)。它们不能限制内容的重用,但可以将访问限制为该内容。例如。维基百科TOS包含这一部分Refraining from certain activities

      从事破坏性和非法滥用设施      

    [...]

         
        
    • 从事滥用或破坏服务的网站的自动使用[...]
    •   
    • [...]对项目网站或与项目网站相关的网络或服务器造成不应有的负担;
    •   
    • [...]流量表明没有明确意图将项目网站用于其声明的目的;
    •   
    • 明知无故地访问,[...]或使用我们计算机系统中的任何非公开区域[...]
    •   

    当然,这只是为了禁止使用DDOS,但是虽然Bots是维基百科的重要组成部分,但其他网站确实对它们不屑一顾。

  • 技术措施: ...就像让来自侵权IP的连接超时,或发送 403错误(非常有礼貌)。其中一些措施可能是自动化的(例如由使用的字符串,奇怪的引用,URL黑客攻击,快速请求触发)或通过警告系统管理员tail来记录日志。

如果服务条款等未明确表示您可以在网站上使用僵尸程序,则可以随时向网站所有者请求书面许可

如果您认为存在误解,并且即使经常使用某个网站也会被阻止,您可以随时与所有者/管理员/网站管理员联系,让他们重新打开您的访问权限。