Tech post: Perl sub to retrieve Key Statistics from Yahoo
Click here to go to the original topic

 
       Value Investing Forum Forum Index -> Tools and Resources
xxyygorich Sat Jul 15, 2006 9:17 am    

Tech post: Perl sub to retrieve Key Statistics from Yahoo 
The following code is a part of script to retrieve all info from key statistics page of a stock from yahoo.com

It might be not enlightening, however it works. :)

Code: #!/usr/local/bin/perl
#  Author: xxyygorich.
#  Copy right @2006
#  This script can be freely distributed. No warranty of any kind will be provided.
#  Usage: stock_para.pl  <symbol>
#  This script is to show a subroutine stock_para() to retrieve info from yahoo.com
#  "key statistics" of a stock symbol.


use strict;

use LWP::Simple;

my $symbol = shift;

my %para;

$para{$symbol} = stock_para ($symbol);            # sub stock_para() returns a hash reference.

print "Market Capital\t".$para{$symbol}->{'mktcap'}."\n";  # example print out Market Capital.

# The key      and value
# 'mktcap'         => Market Capital
# 'EV'             => Enterprise Value
# 'TPE'            => Trailing P/E
# 'FPE'            => Forward P/E
# 'PEGR'           => PEG Ratio
# 'P_S'            => Price/Sale
# 'P_B'            => Price/Book
# 'EV_Rev          => Enterprise Value/Revenue
# 'EV_EBITDA       => Enterprise Value/EBITDA
# 'Pft_Mgn'        => Profit Margin
# 'Opt_Mgn'        => Operating Margin
# 'ROA'            => Return on Assets
# 'ROE'            => Return on Equity
# 'Rev'            => Revenue
# 'RPS'            => Revenue Per Share
# 'Q_Rev_Gr'       => Qtrly Revenue Growth/EBITDA
# 'GPrt'           => Gross Profit
# 'EBITDA'         => EBITDA
# 'Net_Icm2common' => Net Income Avl to Common
# 'dEPS'           => Diluted EPS
# 'Q_Eng_Gr'       => Qtrly Earning Growth
# 'tCash'          => Total Cash
# 'tCPS'           => Total Cash per Share
# 'tDbt'           => Total Debt
# 'tDbt_Eqt'       => Total Debt/Equity
# 'CR'             => Current Ratio
# 'BPS'            => Book Value per Share
# 'OCF'            => Operating Cash Flow
# 'LFCF'           => Leveraged Free Cash Flow
# 'Beta'           => Beta
# '52wkCh'         => 52_week Change
# 'SP500_52wkch'   => S&P500 52wk Change
# '52wkH'          => 52wk High
# '52wkL'          => 52wk Low
# '50dMA'          => 50-day Moving Average
# '200dMA'         => 200-day Moving Average
# 'Sh_OST'         => Shares Outstanding
# 'Sh_FLT'         => Shares Float
# 'Hld_Isd'        => Held by Insiders
# 'FADR'           => Forward Annual Dividend Rate
# 'FADY'           => Forward Annual Dividend Yield
# 'TADR'           => Trailing Annual Dividend Rate
# 'TADY'           => Trailing Annual Dividend Yield
                   
                   
############################################################
# Subroutine: stock_para()                                 #
# Input: $symbol                                           #
# Output: the reference of a hash which contains all para  #
#         listed on the yahoo "key statistic" page         #
############################################################

sub stock_para () {
   my ($symbol) = @_;
   
   my %para;
   
   my $address_front = "http://finance.yahoo.com/q/ks?s=";
   
   my $URL = $address_front.$symbol;
   
   my $page = get ($URL);
   
   $page =~ s/\n//g;
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Market Cap\s+\(intraday\)\:\<\/td\>\s*\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>\<\/tr\>/) {
      $para{'mktcap'} = $1;
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Enterprise Value\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'EV'} = $1;
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Trailing P\/E\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'TPE'} = $1;
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Forward P\/E\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'FPE'} = $1;
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>PEG Ratio\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'PEGR'} = $1;
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Price\/Sales\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'P_S'} = $1;
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Price\/Book\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'P_B'} = $1;
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Enterprise Value\/Revenue\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'EV_Rev'} = $1;
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Enterprise Value\/EBITDA\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'EV_EBITDA'} = $1;
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Profit Margin\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'Pft_Mgn'} = $1;
      
      #print "here Pft_Mgn $1\n";
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Operating Margin\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'Opt_Mgn'} = $1;
      
      #print "here Opt_Mgn $1\n";
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Return on Assets\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'ROA'} = $1;
      
      #print "here ROA $1\n";
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Return on Equity\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'ROE'} = $1;
      
      #print "here ROE $1\n";
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Revenue\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'Rev'} = $1;
      
      #print "here Rev $1\n";
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Revenue Per Share\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'RPS'} = $1;
      
      #print "here RPS $1\n";
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Qtrly Revenue Growth\/EBITDA\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'Q_Rev_Gr'} = $1;
      
      #print "here Q_Rev_Gr $1\n";
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Gross Profit\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'GPrt'} = $1;
      
      #print "here GPrt $1\n";
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>EBITDA\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'EBITDA'} = $1;
      
      #print "here EBITDA $1\n";
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Net Income Avl to Common\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'Net_Icm2common'} = $1;
      
      #print "here Net_Icm2common $1\n";
   }

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Diluted EPS\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'dEPS'} = $1;
      
      #print "here dEPS $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Qtrly Earnings Growth\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'Q_Eng_Gr'} = $1;
      
      #print "here Q_Eng_Gr $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Total Cash\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'tCash'} = $1;
      
      #print "here tCash $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Total Cash Per Share\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'tCPS'} = $1;
      
      #print "here tCPS $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Total Debt\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'tDbt'} = $1;
      
      #print "here tDbt $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Total Debt\/Equity\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'tDbt_Eqt'} = $1;
      
      #print "here tDbt_Eqt $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Current Ratio\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'CR'} = $1;
      
      #print "here CR $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Book Value Per Share\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'BPS'} = $1;
      
      #print "here BPS $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Operating Cash Flow\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'OCF'} = $1;
      
      #print "here OCF $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Levered Free Cash Flow\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'LFCF'} = $1;
      
      #print "here LFCF $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Beta\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'Beta'} = $1;
      
      #print "here Beta $1\n";
   }
   
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>52\-Week Change\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'52wkCh'} = $1;
      
      #print "here 52wkCh $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>S\&P500 52\-Week Change\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'SP500_52wkch'} = $1;
      
      #print "here SP500_52wkch $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>52\-Week High\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'52wkH'} = $1;
      
      #print "here 52wkH $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>52\-Week Low\s+\(.*?\).*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'52wkL'} = $1;
      
      #print "here 52wkL $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>50\-Day Moving Average\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'50dMA'} = $1;
      
      #print "here 50dMA $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>200\-Day Moving Average\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'200dMA'} = $1;
      
      #print "here 200dMA $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Shares Outstanding\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'Sh_OST'} = $1;
      
      #print "here Sh_OST $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Float\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'Sh_FLT'} = $1;
      
      ##print "here Sh_FLT $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>\% Held by Insiders\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'Hld_Isd'} = $1;
      
      #print "here Hld_Isd $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Forward Annual Dividend Rate\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'FADR'} = $1;
      
      #print "here FADR $1\n";
   }   

   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Forward Annual Dividend Yield\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'FADY'} = $1;
      
      #print "here FADY $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Trailing Annual Dividend Rate\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'TADR'} = $1;
      
      #print "here TADR $1\n";
   }
   
   if ($page =~ /<td\s+class\=\"yfnc_tablehead1\"\s+width\=\"\d+\%\"\>Trailing Annual Dividend Yield\s*.*?\:\<\/td\>\<td class\=\"yfnc_tabledata1\"\>(\S+?)\<\/td\>/) {
      $para{'TADY'} = $1;
      
      #print "here TADY $1\n";
   }
   
   return \%para;
}
 
       Value Investing Forum Forum Index -> Tools and Resources
Page 1 of 1

Search Engine Indexer
BlastInvest @2005 p h p B B © 2001, 2002 p h p B B Group