activating a webpage's click command from python

Christopher Browne cbbrowne at acm.org
Mon Jun 10 14:38:30 EDT 2002


In an attempt to throw the authorities off his trail, Peter Hansen <peter at engcorp.com> transmitted:
> "Grimes, Jessica C" wrote:
>> 
>> I want to create a  program that will ask the user what stock he/she 
>> wants to look up.  The program will then extract financial data from 
>> yahoo and import it into a spreadsheet.
>> 
>> My problem is that I don't know how to make the application take the 
>> user's input (the stock's ticker symbol) and place the user's input 
>> from python into the space where yahoo accepts input for a ticker 
>> symbol and activate yahoo's "Look up" click command.
>
> You should investigate HTML forms.  The web page contains a form
> which has several fields and a target URL.  If you view the source
> for the page (in Netscape, hit Ctrl-U; in IE use the View->Source
> menu) you can find buried within it the form and the names of the
> fields.  Forms use the <form> tag and contain <input> fields.
>
> Looking at finance.yahoo.com I can see the form calls "/q" when
> executed, and has a field named "s" for the stock symbol.  You
> can easily take such forms and compose a URL which retrieves the
> data.  In this case this:
>
>    http://finance.yahoo.com/q?s=nt.to
>
> does the job for Nortel on the TSE (disclaimer: anyone even 
> thinking of buying Nortel should probably just keep thinking :-).
> The page returned contains the data, but it's embedded deep
> in the HTML and you _really_ don't want to waste much of your
> time trying to figure this out.  There's got to be a better 
> approach, but I have never spent the time to research it.

The SOAPy way would be:

#!/usr/bin/env python
import SOAP
from SOAP import *
server = "http://services.xmethods.com/soap"
namespace= "urn:xmethods-delayed-quotes"
serv = SOAP.SOAPProxy(server, namespace=namespace)
stocks = ["LNUX", "NT", "TSG", "RHAT", "IBM", "MSFT", "AMR"]
print "Stock    Price"
print "================"
stocks.sort
for el in stocks:
    print "%6s %8.3f" % (el, serv.getQuote(symbol=el))
-- 
(reverse (concatenate 'string "moc.enworbbc@" "sirhc"))
http://www.cbbrowne.com/info/lisp.html
"war is an inappropriate analogy; ``flame war'' is a misnomer.
 in any usenet exchange, the only casualty is time.
 there are better uses for regret."
    --thi <ttn at netcom.com>



More information about the Python-list mailing list