文章介绍
在上一篇博文中,我讲述了利用Python的selenium模块抓取动态数据的方法点击打开链接,那么这些抓到的数据如何处理呢?可以写入到excel表格中制成表格,进而画成统计图表直观显示出来。例如按照时间轴统计网站的在线人数,查看哪个时间段人最多,哪个时间段人最少,从而网站维护人员可以按照合适的时间分配资源,用户则可以选择合适的时间访问。
要做到以上所述的数据处理,涉及到两个问题:
一是如何把数据写入已存在的表格中,并且多次写入不会影响先前的数据;
二是如何每隔一段时间运行抓取动态数据的函数和写入到excel表格的函数,Linux下用crontab很好解决,但windows则比较麻烦。
解决思路
第一个问题,用xlwt模块不能解决,因为xlwt每次都会把excel文件中已存在的数据清除再写入,用xlutils模块可以将数据写入到已存在的excel中而且不影响sheet中原有的数据。你需要安装xlutils模块,联网状态下cmd直接输入pip install xlutils,系统会找到Python的安装目录直接下载解压并安装这个模块。等到终端提示完成后可以看看,在C:\Python27\Lib\site-packages目录下有没有selenium模块,这个目录取决于你安装Python的路径。如果有xlutils和xlutils-1.7.1-py2.7.egg-info这两个文件夹,代表模块可以在Python程序中被加载了。另外还要安装xlrd模块,由这个模块的子模块open_workbook对excel文件执行打开操作,返回文件对象让xlutils的copy子模块重写数据进去,安装xlrd的方法同上。
第二个问题,其实没那么复杂,一开始还考虑是不是要用到os.system(command)或者windows计划任务什么的?但是往简单的角度想,直接写一个循环:循环里面执行抓取动态数据的函数和写入到excel表格的函数,然后time.sleep(x)让进程暂停x秒,接着跳入下一次循环即可。至于什么时候终止循环,引入计数变量即可。
程序实现
思路已经有了,直接上代码。
运行程序,会自动实现下面一系列的操作:
打开浏览器并且打印抓取到的数据列表->把数据写入到excel中->计数变量加1->关闭session和关闭浏览器。
每隔半小时执行一次上述的操作流,这里程序设计成当计数变量到20的时候跳出循环,终止程序运行。
运行效果
在终端打印的结果如下(前4次循环的结果):
版块名称和在线人数写入到excel表格里的效果如下:
从中选择某几个版块,以时间为横坐标,在线人数为纵坐标,插入折线图,画出统计图表:
这里时间跨度不大,在线人数变化不多,因此折线图的效果不是很明显,如果让程序运行一天,统计24小时内各个时间段的在线人数情况,变化就比较明显了。按照这种方法实现统计在线人数,简单直接,并且系统开销很小。唯一要保证的是,你的浏览器能正确访问指定的url,程序不会异常(好像也不好保证的说= = )。