3

我是 Perl/HTML 的新手。我正在尝试从http://en.wikipedia.org/wiki/Periodic_table$mech->get($url)上的元素周期表中获取一些东西,但它一直返回如下错误消息:

获取http://en.wikipedia.org/wiki/Periodic_table时出错 :PeriodicTable.pl 第 13 行禁止

但如果是http://search.cpan.org/$mech->get($url) ,效果很好。$url

任何帮助都感激不尽!


这是我的代码:

#!/usr/bin/perl -w

use strict;
use warnings;
use WWW::Mechanize;
use HTML::TreeBuilder;
my $mech = WWW::Mechanize->new( autocheck => 1 );

$mech = WWW::Mechanize->new();

my $table_url = "http://en.wikipedia.org/wiki/Periodic_table/";

$mech->get( $table_url );
4

2 回答 2

10

这是因为 Wikipedia 根据请求中提供的 User-Agent 拒绝访问某些程序。

您可以通过在实例化之后和之前设置代理来为自己设置别名以显示为“普通”网络浏览器get(),例如:

$mech->agent( 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8' );

使用您帖子中的 URL 对我有用。较短的字符串也可能会起作用。

(我认为您也应该从 URL 中删除尾部斜杠。)

WWW::Mechanize 是LWP::UserAgent的子类- 有关更多信息,请参阅那里的文档,包括有关agent()方法的信息。

不过,您应该限制使用这种访​​问方法。维基百科在robots.txt文件中明确拒绝访问某些蜘蛛。LWP::UserAgent(以 libwww 开头)的默认用户代理在列表中。

于 2010-09-11T11:00:05.720 回答
1

当您遇到此类问题时,您需要查看 HTTP 事务,以便查看网络服务器发送回给您的内容。在这种情况下,您会看到 Mech 连接并获得响应,但 Wikipedia 拒绝响应您的机器人。我喜欢Mac 上的HTTP Scoop 。

于 2010-09-12T00:16:40.027 回答