Трудно быть слишком конкретным, так как ваш вопрос очень общий. Я извлек страницы с помощью LWP и использовал TokeParser для извлечения данных и много раз сохранял вывод в базе данных. Я не использовал мех, но по всем показателям он проще, чем LWP.
Создание агента пользователя с использованием LWP может быть простым:
my $ua = LWP::UserAgent->new();
вам нужно будет учитывать такие вещи, как переадресация, прокси-серверы, файлы cookie или пароли, в зависимости от ваших требований.
Чтобы следовать перенаправлениям:
$ua = LWP::UserAgent->new(
requests_redirectable => ['GET', 'HEAD', 'POST' ]
);
Для хранения файлов cookie:
$ua->cookie_jar( {} );
Чтобы настроить прокси:
$ua->proxy("http", "http://localhost:8888"); # Fiddler
Чтобы добавить пароль для аутентификации:
$ua->credentials( 'www.myhostingplace.com:443' , 'Realm' , 'userid', 'password');
Чтобы получить контент со страницы для локальной обработки:
$url = 'http://www.someurl.com'
my $response = $ua->get($url);
if ( $response->is_error() ) {
# Do some error stuff
}
my $content = $response->content();
Для анализа содержимого с помощью TokeParser:
my $stream = new HTML::TokeParser(\$content);
while ( my $t = $stream->get_token() ) {
if ( $t->[0] eq 'S' and $t->[1] eq 'input' ) {
if ( uc( $t->[2]{ 'name' } ) eq 'SEARCHVALUE' ) {
my $data = $t->[2]{ 'value' };
# Do something with data
}
}
}
Данные передаются в TokeParser в качестве ссылки; Затем я иду по потоку, используя токен get. Каждый элемент HTML передается в массив, который вы можете проверить, чтобы определить, что делать дальше.
В приведенном выше примере я хочу найти входные теги с именем атрибута 'SEARCHVALUE', а затем сохранить атрибут 'value'. Фрагмент HTML может выглядеть примерно так:
<input type="hidden" name="SEARCHVALUE" value="Spock" />
Когда я нажимаю на начало тега ввода ($ t -> [0] eq 'S' и $ t -> [1] eq 'input'), я проверяю атрибут "name" тега (t- > [2] {'name'}) чтобы увидеть, соответствует ли оно искомому значению; если это так, я сохраняю атрибут значения тега ($ t -> [2] {'value'}) в переменной. Затем я могу делать со значением все что угодно, в том числе хранить его в базе данных.
Вы можете многое сделать с TokeParser, и в некоторых случаях это может быть проще, чем использование регулярных выражений для вырезания страницы, но это также может быть немного сложным, чтобы разобраться. Если вы пытаетесь извлечь простой шаблон из возвращаемого содержимого HTML, то регулярное выражение может быть таким же хорошим.
Если вам многое нужно сделать, то я рекомендую "Perl and LWP" Шона Бёрка из O'Reilly. Это было очень полезно для меня в моих поисках в интернете.
Надеюсь, это поможет вам начать хотя бы.