1

スクレイピングの目的で .txt からデータをロードしています。ただし、URL では、その変数を分割して +/- 2 を実行する必要があります。たとえば、値が 2342 の場合、URL のために 2340 と 2344 を作成する必要があります。

私はそれを分割する方法を推測しました:

 $args{birth_year} = ($args{birth_year} - 2) . '-' . ($args{birth_year} + 2);

どうすればそれをURLに入れることができますか?

コードの関連部分は次のとおりです。

  use strict;
  use warnings;
  use WWW::Mechanize::Firefox;
  use Data::Dumper;
  use LWP::UserAgent;
   use JSON;
  use CGI qw/escape/;
  use HTML::DOM;

  open(my $l, 'locations2.txt') or die "Can't open locations: $!";

 while (my $line = <$l>) {
    chomp $line;
     my %args;
     @args{qw/givenname surname birth_place birth_year gender race/} = split /,/, $line;
     $args{birth_year} = ($args{birth_year} - 2) . '-' . ($args{birth_year} + 2);
      my $mech = WWW::Mechanize::Firefox->new(create => 1, activate => 1);
     $mech->get("https://familysearch.org/search/collection/index#count=20&query=%2Bgivenname%3A$args{givenname}20%2Bsurname%3A$args{surname}20%2Bbirth_place%3A$args{birth_place}%20%2Bbirth_year%3A1910-1914~%20%2Bgender%3A$args{gender}20%2Brace%3A$args{race}&collection_id=2000219");

例えば

入力は次のとおりです。

Benjamin,Schuvlein,Germany,1912,M,White

希望の URL は次のとおりです。

https://familysearch.org/search/collection/index#count=20&query=%2Bgivenname%3ABenjamin%20%2Bsurname%3ASchuvlein%20%2Bbirth_place%3AGermany%20%2Bbirth_year%3A1910-1914~%20%2Bgender%3AM% 20%2ブレース%3Aホワイト&collection_id=2000219

4

3 に答える 3

3

この行を変更できないのはなぜですか:

$mech->get("https://familysearch.org/search/collection/index#count=20&query=%2Bgivenname%3A$args{givenname}20%2Bsurname%3A$args{surname}20%2Bbirth_place%3A$args{birth_place}%20%2Bbirth_year%3A1910-1914~%20%2Bgender%3A$args{gender}20%2Brace%3A$args{race}&collection_id=2000219");

これに:

$mech->get("https://familysearch.org/search/collection/index#count=20&query=%2Bgivenname%3A$args{givenname}20%2Bsurname%3A$args{surname}20%2Bbirth_place%3A$args{birth_place}%20%2Bbirth_year%3A$args(birth_year)~%20%2Bgender%3A$args{gender}20%2Brace%3A$args{race}&collection_id=2000219");

注:このビットを変更しました:

%3A1910-1914~%20

これに:

%3A$arg(birth_year)~%20
于 2013-02-12T02:24:09.837 に答える
0

それを行う1つの方法:

file content:
link1
link2
...
linkn

use Data::Dumper;
use strict;
use warnings;

local $/=undef;
open(FILE,'<',$filename) or die $filename;
my $i = 1;
while (my $line = <FILE>){
  chomp($line);
  print "line: $line\n";
  my $tempfile = './$i.html';$i++;
  $mech->get( $line, ':content_file' => $tempfile, synchronize => 1 );
}
于 2013-02-11T08:23:06.647 に答える
0

この回答では、入力のデータを URL エンコードする必要があるかどうかは考慮されていません。つまり、姓が「von Schtupp」の場合、途中で「von%20Schtupp」になる必要があります。

私はこれをテストしていないので、タイプミスや小さなエラーがあるかもしれません. それにもかかわらず、それは私が使用するアプローチです。私の答えは、検索条件がどのような順序で表示されるかは気にしないことも前提としています。

my %query_params = (
    givenname => $args{givenname},
    surname   => $args{surname},
    birth_place => $args{birth_place},
    birth_year => sprintf("%d-%d", $args{birth_year} - 2, $args{birth_year} + 2),
    gender     => $args{gender},
    race       => $args{race},
);
my $query_parameter = join '%20',
                      map { "%2B$_%3A$query_params{$_}" }
                      keys %query_params;
my $url = "https//familysearch.org/search/collection/index#count=20&query=" .
          $query_parameter . "&collection_id=2000219";
于 2013-02-12T01:43:43.523 に答える