text: from pandas import DataFrame
  from pandas.io.common import urlopen
  
  _URL = 'http://download.finance.yahoo.com/d/quotes.csv?'
  
  
  def _get_data(idx_sym):  # pragma: no cover
      """
      Returns DataFrame containing list of component information for
      index represented in idx_sym from yahoo. Includes component symbol
      (ticker), exchange, and name.
  
      Parameters
      ----------
      idx_sym : str
          Stock index symbol
          Examples:
          '^DJI' (Dow Jones Industrial Average)
          '^NYA' (NYSE Composite)
          '^IXIC' (NASDAQ Composite)
  
          See: http://finance.yahoo.com/indices for other index symbols
  
      Returns
      -------
      idx_df : DataFrame
      """
      stats = 'snx'
      # URL of form:
      # http://download.finance.yahoo.com/d/quotes.csv?s=@%5EIXIC&f=snxl1d1t1c1ohgv
      url = _URL + 's={0}&f={1}&e=.csv&h={2}'
  
      idx_mod = idx_sym.replace('^', '@%5E')
      url_str = url.format(idx_mod, stats, 1)
  
      idx_df = DataFrame()
      mask = [True]
      comp_idx = 1
  
      # LOOP across component index structure,
      # break when no new components are found
      while True in mask:
          url_str = url.format(idx_mod, stats, comp_idx)
          with urlopen(url_str) as resp:
              raw = resp.read()
          lines = raw.decode('utf-8').strip().strip('"').split('"\r\n"')
          lines = [line.strip().split('","') for line in lines]
  
          temp_df = DataFrame(lines, columns=['ticker', 'name', 'exchange'])
          temp_df = temp_df.drop_duplicates()
          temp_df = temp_df.set_index('ticker')
          mask = ~temp_df.index.isin(idx_df.index)
  
          comp_idx = comp_idx + 50
          idx_df = idx_df.append(temp_df[mask])
  
      return idx_df
  