老鱼Python数据分析——篇十四:读取“选股宝”的热点板块信息并存为excel文件
热点板块页面:https://xuangubao.cn/dingpan/redian一、首先分析板块名对应的标签二、根据板块名在excel文件中创建对应的sheet,excel的操作这儿就不细说了,主要使用xlwt、xlrd和openpyxl三个库。因为每天的热点板块有可能相同,所以相同的板块就不用再新建sheet,只需要添加数据即可。三、根据板块代码,读取板块的龙头信息。板块龙头...
·
热点板块页面: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)