Normal view

There are new articles available, click to refresh the page.
Before yesterdayMain stream

复刻在腾讯微博中的回忆

By: 胡中元
20 July 2018 at 21:47

大概是微博这个东西刚刚流行起来之时,也就是我初中的时候,我便用心的经营着我的腾讯微博,倒不是想要成为微博大咖,只是认为在同龄人坐在电脑前都只会打游戏时,我刷刷微博、发表一下自己的看法和见解,是更有意思的一件事。

然而腾讯微博迅速就被新浪微博超越,市场占有率几乎为 0 了。我自然也投靠了人多势众的新浪微博,但之前在腾讯微博中发的超过 1000 条微博是我的回忆 —— 中二青春。

我有一种预感,过不了多久腾讯微博就要被腾讯关停了,我可不能让之前写的那些碎碎念就这么消失,于是我用 Python 写了一个爬虫,将所有 [微博+图片+时间+转发微博+转发微博的所有信息] 都给爬到了本地数据库中,然后使用 React 做成了一个网站,名曰“复刻版腾讯微博”,将我发的微博放心地永远留在了自己的服务器中。

查看我的腾讯微博复刻网站,请点击:

https://hzy.pw/i/qqweibo/

## 基于服务器心情而工作的爬虫

截至目前,我的腾讯微博上共 1661 条微博,收听 65 人,听众 765 人。然而爬虫运行完毕之后获取到的微博数量为 1620,另外 41 条数据不翼而飞。我发布的微博和转发的微博中共包含了 1220 张图片,其中 6 张已被他们服务器丢失。微博中共包含 98 个视频,其中的 88 个均丢失(这是视频网站的锅,我们上传到优酷上的视频真的会被他们永远存放着吗,想想也是不可能的)。

微博中还包括了 785 条诸如 http://url.cn/482SZS 这样的短链接,其中 90% 均已失效,访问时直接提示 您访问的网址有误或该网址已过期 :( 此外,虽然 2011 年的微博也还给我留着,但所有微博的评论均没有了,数据被删掉了。。。

我想说的是,要是再不使用爬虫将这些宝贵的回忆取回,真说不定哪天就被腾讯给删掉了 ToT

讲真,各种复杂的情况都被我遇到了: 微博不提供 API,使用 Python 爬取 HTML 再解析,关键是 HTML 结构每次都会变,我花了很久很久的时间才适配了所有情况。另外服务器返回的数据并不可信,第一次得到的数据显示我在某一天发了 1 条微博,带有图片,再获取一次变成了发了 4 条,却无任何图片上传。(这不是腾讯为了防爬虫设计出来的,因为浏览器访问也是这样的,大概是腾讯微博在临死前,为了降低服务器负载而采用的拒绝式服务。。。)

于是我的爬虫在经过数天的完善后,拥有了应对前后数据不一致、连接握手失败、适应 HTTP 结构变化的功能。在此基础上又运行了四五天,才完成了爬取。因为对我那 1000 条微博的每一躺爬取,结果都是不一致的,直到最后连续运行十个小时也没爬出新数据后,我才认为是爬完了。

最终顺利爬取了能找到的所有数据,并存在了数据库里,真的是超级辛苦,让我激动的发了个微博(新浪微博~~)

数据清洗

数据清洗除了格式上的规范,还标记了一些重复的微博,这些微博在我的博客、空间里面重复,我的微博镜像站中没有必要包含这一部分内容。

此外为了制作微博镜像站,使用 Pillow 库将图片原图批量压缩成了 webp 格式的缩略图,在我的微博镜像站中,点击缩略图即可查看大图。 然而事实证明选择 webp 格式是错误的 ,虽然谷歌的 webp 格式拥有很高的压缩率,但是兼容性是个问题,不支持 Firefox、IE 和 iOS,几乎是只有 Chrome 能显示,所谓的 WebP JS 兼容性修复库其实是使用了 Flash 实现,然而后者本身就不值得使用。 所以说 WebP 格式的图片只适合客户端而不适合浏览器端。

最终我还是选择了 jpg 格式作为缩略图。毕竟我的服务器拥有 自动转换为 WebP 功能

愉悦的 React 开发体验

感谢 facebook/create-react-app 提供的脚手架,webpack+eslint+react 开发环境开箱即用。另外不得不感叹 React 的模块化使得逻辑相当清晰,很方便省心。

另外还要感谢 clean-blog CSS 主题lightgallery.js 图片灯箱插件

接下来

如果 QQ 空间、朋友圈、微博、豆瓣 这些网站在某一天宣布关停,我也会把自己的数据通通扒回本地,当我真心不希望这样,因为这个网站本身,就是一代回忆。

有空的话还要干几件事:试着统计下我发的微博中的一些有趣的数据,比如口头禅、文字情感之类的。再来就是把微博中的短链接替换成为长链接,因为正如上文提到的那样,很多短链接都在陆续失效了。

就酱。

现已完成,对我的腾讯微博的大数据统计挺有意思,请访问: https://hzy.pw/p/2569

关于 GMS 教务系统

By: 胡中元
27 February 2017 at 11:22

 简介 

这是一个用于高校毕业生毕业流程线上管理的教务系统,由 Moshel 独立开发,并与 2016 年末开始被应用在西安石油大学计算机学院内。

毕业生在毕业设计时,需要学生与老师所出的题目建立一个多对一的关系,教师出题需要两层审核,而学生拥有三轮选题的机会,并且学生之间可相互竞选题目,此外,管理员可统揽全局,控制教务流程的进行,以及对相关数据的处理。这些就是本系统的大致功能。

答辩环节的完全线上化将是本系统的下一个主要开发方向。

链接:http://bkbysj.xsyu.edu.cn/(限西石大内网访问)

 系统功能 

作为一个完善的业务系统,除了 “选题” 功能外,还拥有完善的账号管理系统及附件管理系统等。

这张用例图是系统设计阶段所画,目前系统的功能已不局限于此。

教师拥有的功能

  

(↑ 点击可查看大图)

教师可以出题,并且实时跟踪自己题目的状态,历年所出题目会形成一个自己的题库以供复用,题目支持上传附件。这些特性弥补了旧选题系统的遗憾。

值得一说的是,本系统中所有的用户头像均不相同,根据用户 UID 哈希生成的随机矢量风格,避免了所有老师学生都使用默认头像的尴尬又无聊的景象。

学生角色

学生是本系统中最简单的角色,可进行选题,以及在选题成功之后通过此系统向老师发送文件。

在选题方面设计了 2 个人性化的特性:1、能看到某道题当前已选人数,这大大避免某道题被大家集中选择。2、在教师查看你的选题志愿之前,可以取消申请,并另选一道题。(事实上在此系统中所有的状态转移均支持最大程度的撤销操作)

管理员信息统揽

(↑ 点击可查看大图)

专门为管理员设计的功能占整个系统工作量的 70% 以上。管理员面板中,可以管理所有的用户类型,设定每位用户的类型,也可以看到现在所有选题配对情况。

值得一说的是,管理员支持使用 Excel 批量导入每届学生老师信息,系统会自动解析 xlsx 文档,并创建对应的登陆账号。

此外,本系统网页中所有可见的表格信息均可一键导出为 Excel 或 Word 文档,方便进一步办公处理。

仪表盘

数据可视化算是最近几年的技术热点,所以我为管理员开发了一个单独的仪表盘页面,用于总览整个选题流程的进行。

在这里,可以直观的看到待选题目和学生总数的柱状对比图,也可以分专业以饼状图的形式看到当前各专业学生的选题状态分布。这些都是选题流程中管理员需要掌握的数据。

数据库备份还原

 

本系统还拥有一个强大的自动备份还原功能,系统会自动在每天凌晨 3 时进行一次数据库备份,同时自动删除 15 天前的备份(不支持手动删除),当然,用户可以选择在需要的时候随时手动创建一个备份。

这样的设计使得系统更加稳定,无论是管理员的误操作,还是被任何形式的恶意攻击,都不会对系统造成很大的影响。

公告系统

 

(↑ 点击可查看大图)

本系统拥有完善的公告系统,支持富文本编辑、设置置顶、支持设置公告对不同类型用户的可见性,以及附件支持。

 关于技术 

以上说的是功能介绍,关于技术的细节欢迎大家点击以下两个链接继续阅读:

1、我在 2016 年 9 月写的:Meteor + React 教务系统开发经历

2、我在 2016 年 10 月发的相关论文:A High Performance Information System for College Graduation Management Cloud

技术亮点预告

1、使用 Javascript 全栈开发,包括 Node 作为后端,React 作为前端框架,MongoDB 作为数据库。

2、使用 Websocket 进行前后端通信,而不是 HTML 或者 AJAX。

3、使用黑科技实现前端浏览器直接操作数据库。

❌
❌