今天在测试下载本月(5月)数据时发现,只有6号、7号、9号和15号有数据,其他日期的数据都是完全相同的。
如何解决这个问题?
通过观察发现,没有数据或数据读取很慢时,页面上会出现这样的进度条:
所以修改代码,加了数据验证判断,进度条这个DIV出现时,就每隔1秒再读一次,10秒后如果还没有得到数据则跳过。
# ——————判断是否加载完毕——————
def is_load(self):
try:
time.sleep(2) # 暂停1秒,等数据刷新
load_node = self.browser.find_element_by_css_selector(".dot-spinner")
print(load_node)
return 0
except Exception as e:
return 1
下载数据的代码修改如下:
# 5.读取日期DIV的数据,如果与所选日期相同,说明更新了数据
date_m = self.browser.find_element_by_css_selector(".ban-chart-date-day")
if(int(date_m.text)==date.day):
i = 1
while(self.is_load()==0):
i += 1
if(i>10):
break
if(i<=10):
# 得到指定日期的数据并保存
self.fupan(date)
通过上述办法,暂时解决了数据读取错乱的问题。但又出现了新问题,大盘数据也没有保存。
通过观察页面数据,发现大盘相关数据有更新,只是页面下方的列表数据没有读取到。所以将数据保存再次进行拆分,大盘数据和涨停数据分开保存。
经过整个上午的调试和思考,发现从页面读取数据的局限性非常大,很容易出错。
那有没有更好的办法呢?
当然是有的,在浏览器上按F12,选择“network”,再次选择其他有数据的日期发现,有很多读取数据的操作被执行,请看下图:
经过观察发现,前四个都是line访问,没有想要的数据,而detail得到JSON格式数据:
手动修改其他日期,如5月10号是没有数据的,结果如下:
再次切换到其他有数据的日期,又能得到数据。所以,接下来可以直接访问该地址,直接得到数据并保存即可。具体实现代码下一篇再讲。
关于项目,需要再次优化,优化内容如下:
# 要解决的问题 (*越多,越重要):
# 一、自动运行,每天三点过后执行一次读取数据,然后后关闭程序(***)
# 二、读取 https://xuangubao.cn/dingpan/redian 页面内容(**)
# 三、筛选热点板块和板块中的强势个股(***)
# 四、python操作excel文件,填充数据(*)