大家都知道www.ip138.com可以查手机号码归属地,但总感觉一个一个去查询特别麻烦,今天尝试着用perl写了个小脚本.获取号码归属地和SIM卡的类型.

 
  
  1. #!/usr/bin/perl -w 
  2. use warnings; 
  3. use strict; 
  4. use LWP::UserAgent; 
  5. use HTML::TreeBuilder; 
  6. my $ip_url = 'http://www.ip138.com:8080/search.asp?action=mobile&mobile='
  7. open DATA,"$ARGV[0]"
  8. sub get_html { 
  9.         my $browser = LWP::UserAgent->new(); 
  10.         $browser->agent('Mozilla/4.0 (compatible;MSIE 6.0;Windows NT 5.1;SV1)'); 
  11.         my $resp = $browser->get(@_); 
  12. #       return ($resp->content,$resp->status_line,$resp->is_success,$resp) if wantarray; 
  13.         return unless $resp->is_success; 
  14.         return $resp->content 
  15. while (<DATA>){ 
  16.         chomp; 
  17.         print "$_\t"
  18.         my $link = $ip_url.$_; 
  19.         my $cont = get_html("$link","Accept-language"=>"zh-cn",'Accept-Charset'=>'gb2312',); 
  20.         #print "$cont\n"
  21.         my $table = $1 if $cont =~ m/<TABLE width=349 border="1" align="center" cellpadding="4" bordercolor=#3366cc style="border-collapse: collapse">(.*?)<\/TABLE>/s; 
  22.            $table =~ s/&nbsp\;/ /g; 
  23. #       print "$table\n"
  24.         my $tree = HTML::TreeBuilder->new(); 
  25.            $tree->strict_comment(1); 
  26.            $tree->parse($table); 
  27.            $tree->eof(); 
  28.         my $tr = ($tree->find_by_tag_name('tr'))[2]; 
  29.         my $tr1 = ($tree->find_by_tag_name('tr'))[3]; 
  30.         my @kids = $tr->content_list( ); 
  31.         my @class = $tr1->content_list(); 
  32.         print $kids[1]->as_text( ), "\t"
  33.         print $class[1]->as_text(),"\n"
  34.            $tree->delete
  35.         sleep(1); 

结果如下: