2012-02-21 3 views
0

이 사이트의 도움으로 Perl에서 좋은 성과를 거두고 있지만 문제가 발생했습니다. 내가 긁어 모으던 페이지 중 하나가 바뀌었고 지금 어떻게해야하는지 알 수 없습니다. 내가하고 싶은 것은 내가 가고 싶은 각 페이지에 대한 링크를 저장하는 것입니다. 문제는 이러한 링크가 소스 코드의 href 속성 태그 안에 있으며 추출 방법을 모르기 때문입니다. 누구든지 나를 도울 수 있을까? 내가 필요Perl WWW : 기계어/HTML : TokeParser 및 href attr에서 URL을 추종/저장 중

링크 라인 (316)에서 기본적으로 내가 내 다른 스크립트에서 사용하기 위해 변수에 대한 링크를 추출해야 http://www.soccerbase.com/teams/home.sd

이 페이지 (소스 코드)의 354입니다. 언급 한대로 WWW :: Mechanize 및 HTML :: TokeParser, 잘하면 거기에 사용할 수 있지만 현재 알아낼 수없는 메서드가 있습니다. 미리 감사드립니다!

답변

0

method find_all_links in 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 
+0

은 다시 한번 당신은 내 문제를 해결했습니다 정말 감사합니다! – blacky

+0

그래, 약간의 문제가 있는데, 실행하려고하면이 오류가 발생합니다 : /usr/local의 "HTTP :: Headers"패키지를 통해 "find_all_links"객체 메서드를 찾을 수 없습니다 /ActivePerl-5.14/lib/HTTP/Message.pm 라인 649. 이유가 무엇입니까? – blacky

+0

이 모든 것이 문자열 배열의 URL이며,이 오류가 발생하는 것처럼 보이지 않습니다. solution.pl 행의 "WWW :: Mechanize"패키지를 통해 "url_abs"객체 메서드를 찾을 수 없습니다. 11. – blacky