متابعة الوصلات و اعادات التحويل

اعادة تحويل

ليس من الغريب ان تقوم بعض الصفحات باعادة تحويل الى صفحات اخرى. من حسن الحظ ان LWP::UserAgent تقوم بدعم التحويل افتراضيا. يمكن التحكم بعدد التحولات التي ستتولاها المكتبة من خلال max_redirect في المثال ادناه صفحة ريداركت التي سنقوم بطلبها ستقوم بعملية اعادة تحويل الى صفحة الاندكس او ما يسمى بالصحفة الافتراضية:

use LWP::UserAgent;

my $ua =
  LWP::UserAgent->new(agent => 'MyWebScaper/1.0 <http://example.com>');

my $response = $ua->get('http://example:3000/redirect');

say $response->decoded_content;

نلاحظ اننا لو قمنا باسناد قيمة صفر الى max_redirect فانه لن يتم تحويلنا الى الصفحة الافتراضية

use LWP::UserAgent;

my $ua = LWP::UserAgent->new(
    agent        => 'MyWebScaper/1.0 <http://example.com>',
    max_redirect => 0
);

my $response = $ua->get('http://example:3000/redirect');

say $response->decoded_content;

الوصلات

متابعة الوصلات و الروابط مهمة معتادة في تحليل صفحات الويب. مرة اخرى باستخدام منقي CSS يمكننا الحصول على الـ a تاج الخاص بالروابط. لنجرب: use HTML::TreeBuilder::XPath; use HTML::Selector::XPath;

my $html = <<'EOF';
<html>
    <head>
        <title>A sample webpage!</title>
    </head>
    <body>
        <h1>Perltuts.com rocks!</h1>
        <a href="http://perltuts.com">perltuts.com</a>
    </body>
</html>
EOF

my $tree = HTML::TreeBuilder::XPath->new;
$tree->ignore_unknown(0);
$tree->parse($html);
$tree->eof;

my $xpath = HTML::Selector::XPath::selector_to_xpath('a');
my @nodes = $tree->findnodes($xpath);
my @attrs = $nodes[0]->getAttributes();
say $attrs[0]->getValue();