this 포스트에서 Ruby/Perl의 Mechanize
은 특정 예제에서 HTML::TreeBuilder 3
보다 사용하기가 쉽다는 것을 알았습니다.Mechanize로 쉽게 만들 수 있습니까?
Mechanize
은 HTML::TokeParser
보다 우수할까요?
Mechanize
을 사용하여 Ruby에서 작성하는 것이 쉬웠습니까?
sub get_img_page_urls {
my $url = shift;
my $ua = LWP::UserAgent->new;
$ua->agent("$0/0.1 " . $ua->agent);
$ua->agent("Mozilla/8.0");
my $req = new HTTP::Request 'GET' => "$url";
$req->header('Accept' => 'text/html');
$response_u = $ua->request($req); # send request
die "Error: ", $response_u->status_line unless $response_u->is_success;
my $stream = HTML::TokeParser->new(\$response_u->content);
my %urls =();
my $found_thumbnails = 0;
my $found_thumb = 0;
while (my $token = $stream->get_token) {
# <div class="thumb-box" ... >
if ($token->[0] eq 'S' and $token->[1] eq 'div' and $token->[2]{class} eq 'thumb-box') {
$found_thumbnails = 1;
}
# <div class="thumb" ... >
if ($token->[0] eq 'S' and $token->[1] eq 'div' and $token->[2]{class} eq 'thumb') {
$found_thumb = 1;
}
# <a ... >
if ($found_thumbnails and $found_thumb and $token->[0] eq 'S' and $token->[1] eq 'a') {
$urls{'http://example.com' . "$token->[2]{href}"} = 1;
# one url have been found. Now start all over.
$found_thumb = 0;
$found_thumbnails = 0;
}
}
return %urls;
}
우선 당신이 루비에서 0이 true로 평가하기 때문에 참/거짓 사용하는 대신에 1/0의 습관을해야한다는 것입니다 : 여기에 루비 기계화를 사용하여 다시 작성하여 방법입니다. – pguardiario
이것은 다른 질문과 거의 같습니다. Mechanize는 파서가 아니므로 TokeParser와 비교할 수 없습니다. (하지만 IMHO의 모든 현대 DOM 파서는 TokeParser보다 우월합니다. 네, 기계 사용 여부와 관계없이 루비로 작성하는 것이 더 쉽습니다. (이 코드는 Perl에서도 간단 할 수 있습니다.) –