Синтаксический анализ сайта с помощью Perl LWP :: UserAgent - требуются файлы cookie - PullRequest
1 голос
/ 04 февраля 2012

В одном проекте на Perl я написал несколько «парсеров», которые позволяют мне посещать сайты с LWP :: UserAgent.Однако у меня проблема с одним веб-сайтом: он ведет себя точно так же, как если бы я заходил на сайт с помощью своего браузера, отключив файлы cookie, поэтому вместо того, чтобы дать мне нужную страницу, она дает мне страницу с сообщением, котороеЯ должен включить куки.Весь код моего скрипта ниже.Есть идеи?Заранее спасибо.

(Обратите внимание, что я посмотрел следующий URL-адрес, который, похоже, отвечает на мой вопрос, но, к сожалению, мне не удалось получить рабочий скрипт на основе его предложения: Cookies в perllwp .)

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Cookies;
my $useragent = LWP::UserAgent->new;
$useragent->cookie_jar(HTTP::Cookies->new);
my $request = HTTP::Request->new(GET => "http://www.the-site-im-trying-to-parse.com");
my $response = $useragent->request($request);
print "Content-type: text/html\n\n";
print $response->as_string;

Ответы [ 3 ]

1 голос
/ 05 февраля 2012

Все, что вы делаете, это загружаете html-данные по HTTP, поэтому браузер не взаимодействует, пока вы не решите просмотреть результат в одном. При этом HTTP-сервер не может узнать, поступил ли ваш запрос от клиента, для которого включены файлы cookie. Таким образом, на самом деле ничего не изменится.

Модуль WWW: Mechanize полезен для удобного просмотра веб-сайтов, но он не решит проблему, с которой вы столкнулись. Так что на самом деле это не поможет вам решить проблему, с которой вы столкнулись.

Более реалистично то, что происходит: есть какой-то код JavaScript на стороне клиента, который не работает правильно после загрузки файла и его отображения в браузере. Это может быть любое количество вещей, например нарушение междоменной политики, реализованной в коде javascript. Без предоставления URL-адреса, к которому вы обращаетесь, невозможно сказать.

1 голос
/ 04 февраля 2012

Рассматривали ли вы использование модуля WWW :: Mechanize? По умолчанию он собирает файлы cookie автоматически. И это немного проще в использовании, так как есть много методов, которые очень полезны.

0 голосов
/ 04 февраля 2012

Попробуйте настроить cookie_jar для временного хранилища (оставьте пустой хэш-адрес):

$useragent->cookie_jar( {} );
...