Perl不会正确地“贪图”

时间:2012-06-26 16:13:53

标签: perl web-scraping

预计会感谢。

此循环传递URL(在$ _变量中),我的想法是将每个URL发送到wget进行处理,如您所见

foreach(@my_array) {
    $browser->get($_);    
    system ("wget -q -O -\"$_\" | grep -oe '\\w*.\\w*@.\\w*.\\w\\+' | sort -u");
}
print EMAILS;

问题:

1)grep没有grep,我只获取URL,这是$ _

2)我不太确定我是否正确地将结果发送到输出文件,因为我所做的只是打印EMAILS,其中EMAILS是上面创建的输出文件的句柄。

3)我尝试做另一种变体,将一个> output.txt嵌入到括号中,

system ("wget -q -O -\"$_\" | grep -oe '\\w*.\\w*@.\\w*.\\w\\+' > output.txt| sort -u");

但是会被忽略

4)问题是grep是在服务器中爬行时完成还是wget必须下载所有文件,然后才能在我的计算机上grep所有电子邮件?当然我不想下载整个网站。

非常感谢你

3 个答案:

答案 0 :(得分:2)

在wget完成后执行grep(下载所有文件)。此外,输出到文件不会将正确的信息传递给sort命令。

LWP在查看电子邮件地址的网页时可能更有用。

http://search.cpan.org/dist/libwww-perl/lib/LWP.pm

答案 1 :(得分:1)

您似乎在URL之前忘记了空格:

system ("wget -q -O - \"$_\" | grep -oe '\\w*.\\w*@.\\w*.\\w\\+' | sort -u"); 

答案 2 :(得分:1)

网址前缺少空格。重定向到了早期。

system("wget -q -O - \"$_\" | grep -oe '\\w*.\\w*@.\\w*.\\w\\+' | sort -u >output.txt");

是什么让您认为system更改$_