作者DJJERRY (键盘张根硕)
看板Perl
标题[问题]如何将两笔爬虫抓下来的资料并为一笔?
时间Wed Jan 28 22:56:15 2015
最近用Web::Scraper抓WIKI编辑纪录的时间和编辑者 抓下来输出的档案像这样:
20141121
20141115
20141030
20140928
Adam
Jack
Mary
Bill
每个编辑者对应到的日期顺序一致(例如Adam对应到的日期就是20141121 Jack对应到的就
是20141115)我想让输出档案变成以下这种形式:
20141121 Adam
20141115 Jack
20141030 Mary
20140928 Bill
还有一点就是我有设定一个截止日 例如我设20141101为截止日的话大於这个日期的时间
便不会列印(只列印20140928和20141030)但编辑者的部分还是全部都会列印
我想做的是大於截止日的编辑者也不要列印出来 请问一下要同时达到这两件事该怎麽写?
附上是我的程式码:
use warnings;
use URI;
use Web::Scraper;
my @user;
my %ss=();
my $url = "
http://ppt.cc/E84~";
my $worker = scraper {
process ".mw-changeslist-date", "editdate[]" => "TEXT"; #这里是抓日期
};
my $worker2 = scraper {
process ".mw-userlink", "username[]" => "TEXT"; #这里是抓编辑者
};
my $FILE;
open(FILE,">test7.txt");
my $result = $worker->scrape( URI->new($url) );
my $result2 = $worker2->scrape( URI->new($url) );
print "Starting...\n";
for my $changeslist ( @{ $result->{editdate} } ) { #以下开始一整段是将抓
my ($d, $m, $y)=$changeslist=~m|, (\d+) (\w+) (\d+)|; 到的日期转换成数字比
大小
$ss{'January'}='01';
$ss{'February'}='02';
$ss{'March'}='03';
$ss{'April'}='04';
$ss{'May'}='05';
$ss{'June'}='06';
$ss{'July'}='07';
$ss{'August'}='08';
$ss{'September'}='09';
$ss{'October'}='10';
$ss{'November'}='11';
$ss{'December'}='12';
if ($d < 10 ) { $d="0$d";};
$date1=$y.$ss{$m}.$d;
$date2="20141126";
print "date1=$date1\n";
if ( $date1 lt $date2 ){
print FILE "$date1\n"; #印出比截止日小的日期
}
}
for my $userlink ( @{ $result2->{username} } ) {
my ($name)="$userlink";
print FILE "$name\n"; #印出抓到的编辑者
}
close (FILE)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.169.23.68
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1422456977.A.8B1.html
1F:推 CindyLinz: 可以宣告额外变数 my(@date, @author); 然後把现在的 01/28 23:10
2F:→ CindyLinz: print FILE "$date1\n"; 改成 push @date, $date1; 01/28 23:10
3F:→ CindyLinz: 把 print FILE "$name\n"; 改成 push @author, $name; 01/28 23:10
4F:→ CindyLinz: 最後再放一个回圈, for my $i (0..$#date) 01/28 23:11
5F:→ CindyLinz: 印 "$author[$i]\n" 到你要输出的档案里面 01/28 23:12
6F:→ CindyLinz: 欸等等... date 没有按照一定顺序哄 XD 01/28 23:12
7F:→ CindyLinz: 那把 if ( $date1 lt $date2 ){..} 改成 01/28 23:13
8F:→ CindyLinz: push @date, $date1 lt $date2; 01/28 23:13
9F:→ CindyLinz: 最後的回圈里面用 print "$author[$i]\n"if($date[$i]) 01/28 23:13
问题已解决 感谢大大~
※ 编辑: DJJERRY (140.124.42.128), 01/29/2015 14:10:21