docstr: Data source: http://baostock.com/baostock/index.php/%E4%B8%AD%E8%AF%81500%E6%88%90%E5%88%86%E8%82%A1
  Avoid a large number of parallel data acquisition,
  such as 1000 times of concurrent data acquisition, because IP will be blocked
  
  Returns
  -------
      pd.DataFrame:
          date      symbol        code_name
          SH600039  2007-01-15    四川路桥
          SH600051  2020-01-15    宁波联合
      dtypes:
          date: pd.Timestamp
          symbol: str
          code_name: str
docstr_tok: ["Data","source",":","http",":","\/\/baostock.com\/baostock\/index.php\/","%","E4","%","B8","%","AD","%","E8","%","AF","%","81500","%","E6","%","88","%","90","%","E5","%","88","%","86","%","E8","%","82","%","A1","Avoid","a","large","number","of","parallel","data","acquisition",",","such","as","1000","times","of","concurrent","data","acquisition",",","because","IP","will","be","blocked","Returns","--","--","--","-","pd.DataFrame",":","date","symbol","code_name","SH600039","2007-01-15","\u56db\u5ddd\u8def\u6865","SH600051","2020-01-15","\u5b81\u6ce2\u8054\u5408","dtypes",":","date",":","pd.Timestamp","symbol",":","str","code_name",":","str"]
code: def get_data_from_baostock(date) -> pd.DataFrame:
      """
      Data source: http://baostock.com/baostock/index.php/%E4%B8%AD%E8%AF%81500%E6%88%90%E5%88%86%E8%82%A1
      Avoid a large number of parallel data acquisition,
      such as 1000 times of concurrent data acquisition, because IP will be blocked
  
      Returns
      -------
          pd.DataFrame:
              date      symbol        code_name
              SH600039  2007-01-15    四川路桥
              SH600051  2020-01-15    宁波联合
          dtypes:
              date: pd.Timestamp
              symbol: str
              code_name: str
      """
      col = ["date", "symbol", "code_name"]
      rs = bs.query_zz500_stocks(date=str(date))
      zz500_stocks = []
      while (rs.error_code == "0") & rs.next():
          zz500_stocks.append(rs.get_row_data())
      result = pd.DataFrame(zz500_stocks, columns=col)
      result["symbol"] = result["symbol"].apply(
          lambda x: x.replace(".", "").upper()
      )
      return result
  
imports: import re
  import abc
  import sys
  from io import BytesIO
  from typing import List, Iterable
  from pathlib import Path
  import fire
  import requests
  import pandas
  import baostock
  from tqdm import tqdm
  from loguru import logger
  from data_collector.index import IndexBase
  from data_collector.utils import get_calendar_list, get_trading_date_by_shift, deco_retry
  from data_collector.utils import get_instruments
label_desc: Use image node_id 5 for calling the CSI500Index obj's underlying member method code with example usage: obj.get_data_from_baostock(date) and returns: result