Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax Perl-将url的输入变量一分为二_Ajax_Json_Perl_Web Scraping_Mozrepl - Fatal编程技术网

Ajax Perl-将url的输入变量一分为二

Ajax Perl-将url的输入变量一分为二,ajax,json,perl,web-scraping,mozrepl,Ajax,Json,Perl,Web Scraping,Mozrepl,我从一个.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::Fire

我从一个.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");
所需URL为:

一种方法:

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 );
}
文件内容:
链接1
链接2
...
林肯
使用数据::转储程序;
严格使用;
使用警告;
本地$/=undef;

打开(文件,这个答案不考虑输入中的数据是否需要URL编码,也就是说,如果某个姓氏是“von Schtupp”,它就需要成为“von %20Stutupp”< /P> 我没有对此进行测试,因此可能有输入错误或小错误。不过,这是我将使用的方法。我的回答还假设您不关心搜索条件的显示顺序

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";

为什么你不能改变这一行:

$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");
%3A$arg(birth_year)~%20
注意:我更改了此位:

%3A1910-1914~%20
为此:

$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");
%3A$arg(birth_year)~%20

你的确切意思是什么?我不清楚这段代码是如何工作的或它的目标。它将检索并保存每个链接以供进一步分析。谢谢。这个线程是关于从.txt加载链接的数据。我不太明白。你能显示输入数据和预期输出吗?@depsz很好的问题!刚刚添加了澄清。请让我看看我知道你是否还有其他问题。除了用sprintf创建URL之外,还有其他问题吗?你把…%d-%d…放在那里,并使用$args{birth_year}-2作为第一个占位符和$args{birth_year}第二个是+2?我不太明白你有什么问题。变量中有值。你也可以替换$mech->get()中已有的变量调用,那么到底缺少了什么?@DavidM我写了一些这样的东西。不是吗?我不知道如何将其放入url。我将立即查看。我应该说,目前我不担心空间,但这是需要考虑的。我是否正确地实现了它?我得到了错误:参数“1910-1914”在减法(-)中不是数字