0

我正在尝试使用 Perl Mechanize 从站点中搜索和查找内容。经过几次执行后,它在开始时运行良好,我得到403 Forbidden而不是搜索结果,

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

如何解决这个问题。请给我一些建议。

4

1 回答 1

0

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

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

  • 约定:几乎/robots.txt每个站点都应该受到您的程序的尊重。不要假设您正在使用的库会解决这个问题;尊重 robots.txt 是您的责任。这是stackoverflowrobots.txt的摘录:

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

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

    还预计开发人员将使用 API 和类似服务来访问内容。例如,Stackoverflow 有非常可定制的 RSS 提要,已经发布了数据库的快照,甚至有一个用于 DB 查询的在线界面,以及一个您可以使用的API 。

  • 法律:(IANAL!)在访问网站之前,除了您的个人即时消费之外,您应该阅读 TOS 或其他任何名称。他们说明您是否以及如何访问该网站并重复使用内容。请注意,所有内容都有一定的版权。版权系统实际上是全球性的,因此您不能仅仅因为在网站所有者之外的另一个国家/地区而免除 TOS。

    您通过使用网站(以任何方式)隐含接受 TOS。

    一些网站将其内容许可给所有人。很好的例子是 Wikipedia 和 Stackoverflow,它们根据 CC-BY-SA 许可用户提交(或者更确切地说,提交用户根据此许可将其内容许可到站点)。它们不能限制内容的重用,但可以限制对该内容的访问。例如,Wikipedia TOS 包含这一节避免某些活动

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

    […]

    • 参与滥用或破坏服务的网站的自动使用 [...]
    • […] 对项目网站或与项目网站连接的网络或服务器造成过度负担;
    • […] 表明无意将项目网站用于其既定目的的流量;
    • 在未经授权的情况下故意访问、[...] 或使用我们计算机系统中的任何非公共区域 [...]

    当然,这只是为了禁止 DDOS,但是虽然 Bots 是 Wikipedia 的重要组成部分,但其他网站确实倾向于对它们不屑一顾。

  • 技术措施: ……比如让来自侵权 IP 的连接超时,或者发送403 错误(非常礼貌)。其中一些措施可能是自动化的(例如,由用户代理字符串、奇怪的引荐来源网址、URL 黑客攻击、快速请求触发)或由警惕tail的系统管理员记录日志。

如果 TOS 等没有明确说明您可以在网站上使用机器人,您可以随时向网站所有者请求这样做的书面许可。

如果您认为存在误解,并且尽管经常使用网站但仍被阻止,您可以随时联系所有者/管理员/网站管理员并要求他们重新打开您的访问权限。

于 2013-08-28T11:30:34.247 回答