Perl WWW ::机械化解析内容问题?
我使用WWW :: Mechanize库来从网站刮取内容。但是,我注意到网页的原始HTML源代码和WWW :: Mechanize解析的内容不同。因此,脚本中的一些功能会被破坏。Perl WWW ::机械化解析内容问题?
所以,这里是脚本(一个子集,只是为了演示错误/问题)
#! /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 ::机械化生成)
它表明:
<tr>
<td nowrap="nowrap">This is some text</td>
<td align="right">This is some more text</td>
</tr><tr>
正如你所看到的,锚标签它被嵌套在第二组标签之间被删除。
这是已知问题还是我需要使用$ mech-> content以外的其他东西来查看源代码?
谢谢。
这是一种常见行为,如"user agent sniffing",例如,对于盲人用户,页面将以不同方式显示。你可以改变你的用户代理字符串与不同的插件,浏览器,也可以作为@LHMathies说,在WWW ::机械化看到UserAgent.pm和Mechanize->new
例子:
my $mech = WWW::Mechanize->new(agent =>
'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)'
);
还有' - > agent_alias()'方法,尽管这些别名很久没有更新过了。 http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize.pm#$mech-%3Eagent_alias%28_$alias_%29 – 2012-08-17 21:12:05
谢谢。我将尝试与用户代理。 – 2012-08-18 01:06:54
我会首先检查用户代理是否对服务器返回的内容产生影响。如果您在'new()'调用中添加'agent =>'Windows IE 6''会发生什么? – LHMathies 2012-08-15 10:36:23