热点板块页面: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()

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐