def grab_options_prices(date_=datetime.datetime(2013,10,1)): mech = Browser() url = "http://finance.yahoo.com/q/op?s=SPY&m={0}-{1}".format(date_.year, date_.month) page = mech.open(url) html = page.read() soup = BeautifulSoup(html) tables = soup.findAll("table") #tables[4] ? #tables[8] ? #tables[9] ? #tables[12] ? #tables[13] ? #goes up to 17 day = datetime.datetime.today() rows = [as_optionday(r, day, 0.0) for r in tables[4].findAll('tr') if is_optionday(r, day, 0.0)] rows = [r for r in rows if is_vanilla(r.option_name)] maturities = utility.sorted_groupby([r for r in rows], Options.Day.expiration_date) return [Options.make_quote(m[1]) for m in maturities]
def make_maturity_from_options(expiration_date, options): """ Builds a maturity data structure from a list of unsorted options with the same expiration date """ assert(all([option.expiration_date() == expiration_date for option in options])) options = sorted(options, key=OptionsDay.quote_date) return Maturity(expiration_date, [make_quote_from_options(quote_date, options_) for quote_date, options_ in utility.sorted_groupby(options, OptionsDay.quote_date)])