上一篇網路蜘蛛Spider和大家提到要寫一個搜括email的程式,
這邊就來實作一下吧,
當然還是用簡單易用的perl來寫:)

想法
程式的想法是這樣,
一、讀入一個帳號
二、連結到該帳號的profile頁面
三、抓下這個頁面
四、比對這個頁面是否有email帳號,有email帳號的話將帳號秀出來

準備資料
首先我們先準備一些pixnet的帳號,
當然這些帳號也可以用程式來找,
但這邊我就不示範怎麼抓了,
這些帳號我直接寫在程式裡面。

程式碼
use WWW::Mechanize;
use HTML::TreeBuilder;

my $mech=WWW::Mechanize->new();
while(<DATA>){
  chomp;
  my $id=$_;
  my $url='http://www.pixnet.net/profile/'.$id;
  my $res= $mech->get($url);
  my $root=HTML::TreeBuilder->new_from_content($res->content);
  my @links=$root->look_down(_tag=>'td');
  for($j=0; $j<=$#links; $j++){
    if($links[$j]->as_trimmed_text =~ /\@/){
      print $links[$j]->as_trimmed_text, "\n";
    }
  }
  $root->delete;
}
__DATA__
jck11

解說
這個程式應該蠻簡單的,
用到了WWW::Mechanize和HTML::TreeBuilder兩個模組,
在比對email帳號時只比對了@符號,
可能不是很精確,
不過下一篇文章我會講介紹一個判斷email是否正確的模組:)
__DATA__下面可以輸入你想找的pixnet帳號,
這個示範只輸入我的帳號而以,
當然這個部份可以改成讀入一個外部檔案。

jck11 發表在 痞客邦 PIXNET 留言(2) 人氣()


留言列表 (2)

發表留言
  • changyang319
  • 請教一下大大,我執行了這個程式後,出現了以下的錯誤訊息,我應該怎麼做才能修正好這個Mechanize的錯誤了,謝謝大大。

    Can't locate WWW/Mechanize.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/l
    ib .) at D:\Perl\semail.pl line 1.
    BEGIN failed--compilation aborted at D:\Perl\semail.pl line 1.
  • WWW::Mechanize模組不是內建的,必須安裝。
    如果是用ActivePerl的話,可以在命令列模式下ppm指令就能進入perl模組安裝模式。
    我再來寫一篇比較完整的安裝模組介紹:)

    jck11 於 2007/11/05 17:12 回覆

  • 路過
  • 您好!
    您的程式幫助我很多,
    只是我有一個問題想問一下@@
    因為我直接拿您的程式來執行的時候,
    什麼內容都印不出來,
    於是我試著修改一下程式,
    我將您的這行:
    my $root=HTML::TreeBuilder->new_from_content($res->content);
    改成:
    my $root=HTML::TreeBuilder->new_from_content($mech->content);
    於是就成功印出E-mail了,
    我在想是不是從$mech才撈得出資料,
    $mech->get($url);只是讓它到達$url的那個網站而已,
    從$res是撈不出資料的@@