لماذا لا يمكنني جلب صفحات ويكيبيديا باستخدام LWP::Simple؟

StackOverflow https://stackoverflow.com/questions/24546

  •  09-06-2019
  •  | 
  •  

سؤال

أحاول جلب صفحات ويكيبيديا باستخدام LWP::بسيطة, ، لكنهم لن يعودوا.هذا الرمز:

#!/usr/bin/perl
use strict;
use LWP::Simple;

print get("http://en.wikipedia.org/wiki/Stack_overflow");

لا يطبع أي شيء.ولكن إذا كنت تستخدم بعض صفحات الويب الأخرى، على سبيل المثال http://www.google.com, ، أنه يعمل بشكل جيد.

هل هناك اسم آخر يجب أن أستخدمه للإشارة إلى صفحات ويكيبيديا؟

ما يمكن أن يحدث هنا؟

هل كانت مفيدة؟

المحلول

يبدو أن ويكيبيديا تحظر LWP::Simple الطلبات: http://www.perlmonks.org/?node_id=695886

يعمل ما يلي بدلاً من ذلك:

#!/usr/bin/perl
use strict;
use LWP::UserAgent;

my $url = "http://en.wikipedia.org/wiki/Stack_overflow";

my $ua = LWP::UserAgent->new();
my $res = $ua->get($url);

print $res->content;

نصائح أخرى

يمكنك أيضًا تعيين UA على الوحدة النمطية LWP::Simple - ما عليك سوى استيراد المتغير $ua، وسيسمح لك بتعديل UserAgent الأساسي:

use LWP::Simple qw/get $ua/;
$ua->agent("WikiBot/0.1");
print get("http://en.wikipedia.org/wiki/Stack_overflow");

لقد قمت بحل هذه المشكلة باستخدام LWP:RobotUA بدلاً من LWP::UserAgent.يمكنك قراءة الوثيقة أدناه.لا توجد اختلافات كبيرة يجب عليك تعديلها.

http://lwp.interglacial.com/ch12_02.htm

لأن Wikipedia تحظر سلسلة وكيل مستخدم HTTP التي يستخدمها LWP::Simple.

سوف تحصل على الرد "403 ممنوع" إذا حاولت استخدامه.

جرب وحدة LWP::UserAgent للتغلب على هذه المشكلة، وذلك عن طريق تعيين سمة الوكيل.

راجع أيضًا وحدات CPAN ذات الصلة بـ Mediawiki - وهي مصممة للوصول إلى مواقع Mediawiki (ومنها ويكيبيديا واحدة منها) وقد تمنحك المزيد من الأجراس والصفارات أكثر من LWP البسيط.

http://cpan.uwinnipeg.ca/search?query=Mediawiki&mode=dist

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top