2

Perl の WWW::Mechanize ライブラリを使用して、Web サイトからコンテンツをスクレイピングしています。しかし、Web ページの元の 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;

短くシンプルなコードで、Web サイトに接続し、HTML ページ全体を取得します。

スクリプトを実行し、出力をテキスト ファイルにリダイレクトして、分析できるようにします。

perl test.pl >> source_code.txt

ここで、source_code.txt とブラウザ (Firefox) で表示される Web サイトの実際のソース コードを比較すると、違いがあります。

例えば:

<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>

ご覧のとおり、2 番目のタグ セットの間にネストされていたアンカー タグが削除されました。

これは既知の問題ですか、それともソース コードを表示するには $mech->content 以外のものを使用する必要がありますか?

ありがとう。

4

1 に答える 1

4

これは、「ユーザー エージェント スニッフィング」として知られる一般的な動作です。たとえば、目の不自由なユーザーの場合、ページは異なる方法で表示されます。さまざまなプラグインを使用してブラウザでユーザー エージェント文字列を変更できます。また、@ 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)' 
);

一般的なユーザー エージェント文字列のリストも参照してください。

于 2012-08-15T19:00:04.813 に答える