我正在尝试通过使用Perl Mechanize来搜索和查找网站上的内容。在开始执行后,我很快就得到了 403 Forbidden 而不是搜索结果,
$m = WWW::Mechanize->new();
$url="http://site.com/search?q=$keyword";
$m->get($url);
$c = $m->content;
print "$c";`
怎样才能解决这个问题。请给我一些建议。
答案 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 queries和API。
法律:(IANAL!)在访问网站以获取除个人即时消费之外的任何内容之前,您应阅读服务条款或其他任何内容。它们说明您是否以及如何访问该站点并重用内容。请注意,所有内容都有一些版权。版权制度实际上是全球性的,因此您不能仅仅因为在网站所有者以外的其他国家/地区而免于服务条款。
您通过使用网站(无论如何)隐式接受服务条款。
有些网站会将内容许可给所有人。很好的例子是维基百科和Stackoverflow,它根据CC-BY-SA许可用户提交的内容(或者更确切地说,提交用户根据此许可证将其内容许可到网站)。它们不能限制内容的重用,但可以将访问限制为该内容。例如。维基百科TOS包含这一部分Refraining from certain activities:
从事破坏性和非法滥用设施[...]
- 从事滥用或破坏服务的网站的自动使用[...]
- [...]对项目网站或与项目网站相关的网络或服务器造成不应有的负担;
- [...]流量表明没有明确意图将项目网站用于其声明的目的;
- 明知无故地访问,[...]或使用我们计算机系统中的任何非公开区域[...]
当然,这只是为了禁止使用DDOS,但是虽然Bots是维基百科的重要组成部分,但其他网站确实对它们不屑一顾。
技术措施: ...就像让来自侵权IP的连接超时,或发送 403错误(非常有礼貌)。其中一些措施可能是自动化的(例如由使用的字符串,奇怪的引用,URL黑客攻击,快速请求触发)或通过警告系统管理员tail
来记录日志。
如果服务条款等未明确表示您可以在网站上使用僵尸程序,则可以随时向网站所有者请求书面许可。
如果您认为存在误解,并且即使经常使用某个网站也会被阻止,您可以随时与所有者/管理员/网站管理员联系,让他们重新打开您的访问权限。