Perl WWW :: Mechanize Parse Content问题?

时间:2012-08-15 06:21:39

标签: perl www-mechanize

我正在使用Perl的WWW :: Mechanize库来抓取网站上的内容。但是,我注意到网页的原始HTML源代码和WWW :: Mechanize解析的内容有所不同。结果,我的脚本中的一些功能被破坏了。

所以,这是脚本(一个子集,只是为了演示错误/问题)

#! /usr/bin/perl

use WWW::Mechanize;
use warnings;

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

$url="http://www.example.com";

$mech->get($url);

print $mech->content;

简短的代码,它将连接到网站并检索整个HTML页面。

我运行脚本并将输出重定向到文本文件,以便我可以分析它们。

perl test.pl >> source_code.txt

现在,当我比较source_code.txt和浏览器(Firefox)显示的网站的实际源代码时,存在差异。

例如:

<tr>
<td nowrap="nowrap">This is Some Text</td>
<td align="right"><a href="http://example.com?value=key">Some more Text</a></td>
</tr><tr>

上面的源代码是在浏览器中观察到的。 (查看页面来源特征)

但是,在文本文件中,source_code.txt(由WWW :: Mechanize生成)

它显示:

<tr>
<td nowrap="nowrap">This is some text</td>
<td align="right">This is some more text</td>
</tr><tr>

如您所见,嵌套在第二组标签之间的锚标签已被删除。

这是一个已知问题,还是我需要使用$ mech-&gt;内容以外的其他内容来查看源代码?

感谢。

1 个答案:

答案 0 :(得分:4)

这是一种称为"user agent sniffing"的常见行为,例如对于盲人用户,页面的显示方式会有所不同。您可以使用不同的插件更改浏览器中的用户代理字符串,也可以在@ LHMathies中说,在WWW :: Mechanize中查看UserAgent.pmMechanize->new

示例:

my $mech = WWW::Mechanize->new( agent => 
     'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)' 
);

另见a list of common user agent strings