Perl WWW: Механизация / HTML: TokeParser и отслеживание / сохранение URL из href attr - PullRequest
0 голосов
/ 21 февраля 2012

Я добился хорошего прогресса в Perl благодаря помощи на этом сайте, но столкнулся с проблемой. Одна из страниц, с которых я работал, изменилась, и я не могу понять, как добраться до нее сейчас. То, что я хочу сделать, это сохранить ссылку на каждую страницу, на которую я хочу попасть. Проблема в том, что эти ссылки находятся внутри тегов атрибута href в исходном коде, и я понятия не имею, как их извлечь. Кто-нибудь может мне помочь?

ссылки мне нужны от 316 до 354 этой страницы (исходный код) http://www.soccerbase.com/teams/home.sd

Мне нужно в основном извлечь ссылки на переменные для использования в моих других сценариях. Как уже упоминалось, я использую WWW :: Mechanize и HTML :: TokeParser, надеюсь, в них есть методы, которые я могу использовать, но пока не могу понять. Заранее спасибо!

1 Ответ

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

См. метод find_all_links в WWW :: Mechanize . Не нужно беспокоиться вручную с парсером. Возможно, вы захотите расслабить регулярное выражение, чтобы получить сразу все ~ 1000 возможных команд.

use WWW::Mechanize qw();
my $w = WWW::Mechanize->new;
$w->get('http://www.soccerbase.com/teams/home.sd');
for my $link ($w->find_all_links(url_regex => qr/comp_id=1\b/)) {
    # 20 instances of WWW::Mechanize::Link
    printf "URL=%s\tTeam=%s\n", $link->url_abs, $link->text
}

URL=http://www.soccerbase.com/tournaments/tournament.sd?comp_id=1       Team=Premier League
URL=http://www.soccerbase.com/teams/team.sd?team_id=142&comp_id=1       Team=Arsenal
URL=http://www.soccerbase.com/teams/team.sd?team_id=154&comp_id=1       Team=Aston Villa
URL=http://www.soccerbase.com/teams/team.sd?team_id=308&comp_id=1       Team=Blackburn
URL=http://www.soccerbase.com/teams/team.sd?team_id=354&comp_id=1       Team=Bolton
URL=http://www.soccerbase.com/teams/team.sd?team_id=536&comp_id=1       Team=Chelsea
URL=http://www.soccerbase.com/teams/team.sd?team_id=942&comp_id=1       Team=Everton
URL=http://www.soccerbase.com/teams/team.sd?team_id=1055&comp_id=1      Team=Fulham
URL=http://www.soccerbase.com/teams/team.sd?team_id=1563&comp_id=1      Team=Liverpool
URL=http://www.soccerbase.com/teams/team.sd?team_id=1718&comp_id=1      Team=Man City
URL=http://www.soccerbase.com/teams/team.sd?team_id=1724&comp_id=1      Team=Man Utd
URL=http://www.soccerbase.com/teams/team.sd?team_id=1823&comp_id=1      Team=Newcastle
URL=http://www.soccerbase.com/teams/team.sd?team_id=1855&comp_id=1      Team=Norwich
URL=http://www.soccerbase.com/teams/team.sd?team_id=2093&comp_id=1      Team=QPR
URL=http://www.soccerbase.com/teams/team.sd?team_id=2477&comp_id=1      Team=Stoke
URL=http://www.soccerbase.com/teams/team.sd?team_id=2493&comp_id=1      Team=Sunderland
URL=http://www.soccerbase.com/teams/team.sd?team_id=2513&comp_id=1      Team=Swansea
URL=http://www.soccerbase.com/teams/team.sd?team_id=2590&comp_id=1      Team=Tottenham
URL=http://www.soccerbase.com/teams/team.sd?team_id=2744&comp_id=1      Team=West Brom
URL=http://www.soccerbase.com/teams/team.sd?team_id=2783&comp_id=1      Team=Wigan
URL=http://www.soccerbase.com/teams/team.sd?team_id=2848&comp_id=1      Team=Wolves
...