最近刚刚面完中大的预推免复试,发挥得并不理想,一天天战战兢兢之余得找点活干。打开微博热搜,
依然是那几个宝藏男孩登上热搜,突然间想写个程序统计一下微博热搜的趋势、上榜时间之类的,就温习一下Python爬虫和Django之类的知识,开始着手在自己的Github IO上搭一个微博热搜数据收集及监控页面。
目前的功能
- 支持每一分钟爬取微博热搜榜,并使用正则表达式提取出榜单数据并存储。
- 当前使用SQLite
轻量级数据库进行数据存储。 - 使用Django作为后端服务器程序。
- 使用Redis作为缓存机制。
- 使用eCharts作为数据可视化处理。
- 目前图表功能支持“当前微博热搜榜”、“热搜前十趋势折线图”、“热搜前二十名热度图”、“历史前十登顶热搜”、“最近十个登顶热搜”、“历史前20热度热搜”、“历史前20在榜时长热搜”。
- 支持热搜搜索功能(支持模糊搜索)。
- 点击当前热搜,可以查看该热搜的历史热度图表以及其他信息。
更新进度
2019-09-27 的更新
- 新增侧边热搜点击逻辑,点击侧边的热搜后,会弹出该热搜的历史热度图表。
2019-09-26 的更新
- 新增模糊搜索功能。
- 修改一些字段,如将部分图表的“每一分钟更新”改成“每隔五分钟更新”(因为采用了缓存)。
2019-09-24 下午的更新
- 修正排版,将搜索框移至页面上方。
- 优化布局,当用户一开始没有搜索操作时,隐藏用于显示搜索结果的eCharts图表。当用户点击搜索按钮时,图标会下拉(使用jQuery的slideDown)显示,并且增加一个“收回”按钮供用户关闭该图表。
- 增加缓冲机制,使用Redis数据库缓存经常访问的数据,加速页面的访问。事实证明页面加载速度快了不少,但也牺牲了一些实时性。
- 增加一些声明。
2019-09-24 上午的更新
- 修正一些问题。当用户使用HTTPS协议访问该页面时,会提示警告框告知用户相应情况,指导用户使用HTTP协议访问该页面。
2018-09-23 的更新
- 增加“历史前20热度的热搜”、“历史前20在榜时长热搜”图表。
- 增加搜索功能,允许用户使用精确的热搜名查询到该热搜的热度趋势、最高热度、最高排位、在榜时间等等。
- 修正一些字段,将一些残余的英语单词改成中文词汇。
- 将后端服务器移至国内的腾讯云服务器,以便爬虫程序不崩溃。
2018-09-22 的更新
- 完成基本的功能,如“当前微博热搜榜”、“热搜前十趋势折线图”、“热搜前二十热度图”等图表。
待改进的功能
- 弄懂eCharts的tooltip的用法,讲上榜时间等字段弄上去。
- 优化服务器传输过来的数据,比如一些重复的字段不要写在json上面了,采用list而不用dict,节省一些带宽。
- Redis缓存机制也需要优化一下,看看能不能定时刷新缓存,而不用有请求再写入缓存,否则第一个用户会感觉很卡。
一些关键技术点和文档
- 爬取热搜的正则表达式为:
r'<td class="td-01 ranktop">(\d+)</td>\n\s+<td class="td-02">\n\s+<a .*?>(.*?)</a>\n\s+<span>(\d+)</span>'
- Django ORM对应于原生SQL的group by字段的语句为(举一个例子):
HotSpot.objects.values('title').annotate(count=Count('title')).order_by().all()
- 关于Django聚合查询(aggregation)的详细内容,可以去Django文档-聚合查看。
- 关于Django的ORM机制的简单用法,可以去Django文档-执行查询查看。
- 关于eCharts的用法,可以去eCharts官网查看。
- 关于Redis的简介,可以去菜鸟教程-Redis教程查看。
- 关于Django-Redis的用法,可以去Django-Redis官方文档查看。
- 关于Django的缓存框架,可以去Django文档-缓存框架查看。