Читать веб-страницу с Perl - PullRequest
       0

Читать веб-страницу с Perl

0 голосов
/ 21 октября 2019

Я пытаюсь прочитать содержимое веб-страницы с помощью Perl в Windows 10. Код не работает для следующего сайта:

https://www.dividendinvestor.com/dividend-quote/intc/

Вот код, который яЯ использую:

use LWP::Simple qw(get);
my $url = 'https://www.dividendinvestor.com/dividend-quote/intc/';
my $html = get $url;
print $html;

Есть идеи, почему я не могу прочитать эту страницу?

Ответы [ 2 ]

3 голосов
/ 21 октября 2019

LWP :: Simple довольно прост и не позволяет вам делать что-то умное, например, смотреть детали ответа. Итак, давайте изменим на LWP :: UserAgent и посмотрим, что ответит.

use LWP::UserAgent;

my $url = 'https://www.dividendinvestor.com/dividend-quote/intc/';

my $ua = LWP::UserAgent->new;

my $resp = $ua->get($url);

print $resp->status_line;

Это напечатает:

403 Запрещено

Так что я думаю, что комментарий Квентина правильный и что владельцы сайта блокируют людей, использующих такие технологии, как LWP.

Итак, давайте изменим строку useragent, чтобы она выглядела как Internet Explorer.

use LWP::UserAgent;

my $agent = ' Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko';

my $url = 'https://www.dividendinvestor.com/dividend-quote/intc/';

my $ua = LWP::UserAgent->new;
$ua->agent($agent);

my $resp = $ua->get($url);

print $resp->status_line;

Теперь я получаю:

200 ОК

Так что мы должны быть в порядке, чтобы получить контент.

use LWP::UserAgent;

my $agent = ' Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko';

my $url = 'https://www.dividendinvestor.com/dividend-quote/intc/';

my $ua = LWP::UserAgent->new;
$ua->agent($agent);

my $resp = $ua->get($url);

if ($resp->is_success) {
  print $resp->content;
} else {
  print $resp->status_line;
}

И это похоже на работухорошо.

Примечание: Конечно, изменение строки useragent, как это, довольно нечестно. Предположительно, владельцы сайта имеют веские основания желать отговорить людей от доступа к своему сайту таким способом. Так что не раздражайте их, пытаясь обойти их ограничения. Прочитайте условия обслуживания сайта, чтобы увидеть, что они хотят делать. Возможно, у них есть API, который предоставит вам необходимые данные.

1 голос
/ 21 октября 2019

Как писал Дейв Кросс, проблема связана с пользовательским агентом. Модуль LWP :: Simple можно использовать следующим образом:

use LWP::Simple qw/$ua get/;

$ua->agent('Mozilla/5.0');
my $url = 'https://www.dividendinvestor.com/dividend-quote/intc/';
my $html = get $url;
print $html;

Как указывает документация, пользовательский агент, созданный этим модулем (LWP :: Simple), будет идентифицировать себя как "LWP ::Просто/#.##". Таким образом, мы можем изменить его до запроса "GET".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...