老鱼Python数据分析——篇十四:读取“选股宝”的热点板块信息并存为excel文件

    xiaoxiao2022-07-02  135

    热点板块页面:https://xuangubao.cn/dingpan/redian

    一、首先分析板块名对应的标签

    二、根据板块名在excel文件中创建对应的sheet,excel的操作这儿就不细说了,主要使用xlwt、xlrd和openpyxl三个库。因为每天的热点板块有可能相同,所以相同的板块就不用再新建sheet,只需要添加数据即可。

    三、根据板块代码,读取板块的龙头信息。板块龙头信息在:https://xuangubao.cn/theme/xxxxxxx(板块代码)。

    代码实现分为以下几点:

    1. 登录选股宝网站,并跳转到热点板块页面

    2. 遍历热点板块页面,加载前5个热点板块

    3. 根据板块名,操作excel文件

    4.根据板块ID,读取板块龙头(今日龙头和人气龙头),将龙头信息保存到excel文件还未实现。

    from _datetime import datetime import common.xgb_oper as oper import time,xlwt,xlrd, openpyxl, os # 读取热点板块页面,排名前两名的板块热股(xx天xx板) class ReDian(): rdfile = "xgbdata\\xgbdata_redian.xlsx" # 保存每天热点板块数据 title = ["时间","板块","板块涨副","人气龙头","今日龙头"] browser = "" # 浏览器对象 page = "" # 得到页面源码 soup = "" # BeautifulSoup对象 # ——————根据名称返回工作薄对象—————— # 如果不存在则创建新工作薄后返回 def create_sheet(self, sheet_name): wb = openpyxl.Workbook() # 如果文件存在,则加载xlsx文件(只能是xlsx) if (os.path.exists(self.rdfile)): wb = openpyxl.load_workbook(self.rdfile) sheet_names = wb.get_sheet_names() # 判断sheet_name是否存在 if(sheet_names.count(sheet_name)==0): st = wb.create_sheet(sheet_name) st.append(self.title) # 添加标题 wb.save(self.rdfile) return st return wb.get_sheet_by_name(sheet_name) # ——————读取龙头—————— def load_longtou(self): txt = "" trs = self.browser.find_elements_by_css_selector(".stocklist-pool-table tr") for tr in trs[1:]: # 判断是否涨停,如果未涨停则读下一条数据 if(len(tr.find_element_by_css_selector(".sort-target").find_elements_by_tag_name("div"))<3): continue sname = tr.find_element_by_css_selector(".desc-name").text scount = tr.find_element_by_css_selector(".sort-target").find_elements_by_tag_name("div")[0].text scount = scount.replace("连板","").replace("首板","1") stime = tr.find_element_by_css_selector(".sort-target").find_elements_by_tag_name("div")[2].text txt += sname+" "+scount+" "+stime + chr(10) print(txt) # 保存到xlsx文件对应的sheet中 # ——————遍历每个热点板块的页面,读取龙头—————— def load_leadingstock(self, group_list): for g in group_list: txt = g.split("_")[0] code = g.split("_")[1] url = "https://xuangubao.cn/theme/"+str(code) self.browser.get(url) time.sleep(1) spanlist = self.browser.find_elements_by_css_selector(".stocklist-pool-icon-item") if (len(spanlist) <= 0): return # 今日龙头 spanlist[3].click() # 点击全部 spanlist[0].click() # 点击今日龙头 self.load_longtou() time.sleep(1) # 人头龙头 spanlist[3].click() # 点击全部 spanlist[1].click() # 点击人气龙头 self.load_longtou() time.sleep(2) # ——————遍历“热点”页面,加载前5个热点板块———— def load_group(self): self.browser.get("https://xuangubao.cn/dingpan/redian") divs = self.browser.find_elements_by_css_selector(".topgainer-tag") group_list =[] for div in divs[:5]: a = div.find_element_by_tag_name("a") txt = a.text # 去除ST板块 if(txt.upper().find("ST")>=0): continue href = a.get_attribute("href") txt = txt+"_"+str(href)[str(href).rfind("/")+1:] group_list.append(txt) print("板块:"+txt) self.create_sheet(txt) # 加载热点板块的龙头 self.load_leadingstock(group_list) # ——————启动函数—————— def start(self): self.browser = oper.login() # 登录选股宝网站 # 当天下午三点后才能下载 if (datetime.now().hour >= 15): self.load_group() else: print("时间未到,当前时间是"+str(datetime.now().time())) self.browser.quit() # 关闭浏览器 if __name__ == "__main__": rd = ReDian() rd.start()

     

    最新回复(0)