我正在尝试运行以下代码来解析以下网址的html页面内容
#!/usr/bin/perl
use LWP::Simple;
use HTML::TreeBuilder;
$response = get("http://www.viki.com/");
print $response;
什么都没打印出来。如果从浏览器模拟,这是有效的。
答案 0 :(得分:2)
当我尝试使用http://www.viki.com
访问LWP::UserAgent
时,我收到以下回复:
<html><body><h1>403 Forbidden</h1>
Request forbidden by administrative rules.
</body></html>
get
中的LWP::Simple
子例程实现如下(至少在版本6.13中)。
sub get ($)
{
my $response = $ua->get(shift);
return $response->decoded_content if $response->is_success;
return undef;
}
如您所见,get
方法仅在响应成功时返回内容,否则返回undef
。
来自LWP::UserAgent
的回复是403错误,换句话说不是成功。因此,LWP::Simple
会为同一网址返回undef
。
网站(http://www.viki.com
)似乎正在检查用户代理字符串,并且仅将内容返回到&#34;有效&#34;用户代理。 LWP::Simple
被硬编码为使用LWP::Simple/$VERSION
作为用户代理。
如果你真的必须使用LWP::Simple
,那么你可以像这样强制用户代理:
use LWP::Simple qw/ get $ua /;
$ua->agent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0');
print get('http://www.viki.com');
LWP::Simple
公开它在内部使用的LWP::UserAgent
实例作为可选包含的$ua
变量。仍然需要在此实例上配置用户代理以使此特定页面加载。