和我一起构建搜索引擎(二)网络爬虫

网络爬虫又称网络蜘蛛、Web采集器等,它是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

我们在设计网络爬虫的时候需要注意两点:

鲁棒性。Web中有些服务器会制造采集器陷阱(spider traps),这些陷阱服务器实际上是Web页面的生成器,它能在某个域下生成无数网页,从而使采集器陷入到一个无限的采集循环中去。采集器必须能从这些陷阱中跳出来。当然,这些陷阱倒不一定都是恶意的,有时可能是网站设计疏忽所导致的结果。

礼貌性。Web服务器具有一些隐式或显式的政策来控制采集器访问它们的频率。设计采集器时必须要遵守这些代表礼貌性的访问政策。 Continue reading

和我一起构建搜索引擎(一)简介

我们上网用得最多的一项服务应该是搜索,不管大事小情,都喜欢百度一下或谷歌一下,那么百度和谷歌是怎样从浩瀚的网络世界中快速找到你想要的信息呢,这就是搜索引擎的艺术,属于信息检索的范畴。

这学期学习了《现代信息检索》课程,使用的是Stanford的教材Introduction to Information Retrieval,网上有电子版,大家可以参考。 Continue reading

认真你就赢了

突然发现,从小到大,自己做事都做得很慢,别人一会做完的作业,我可能要花好几个小时。但拿作业一对比,明显能看出差距,自己精雕细琢的作品不是别人随随便便就能比的。

最近几次和同学合作完成大作业也遇到了类似的情况,数据抓取的同学给我的数据,不是格式不对就是内容缺胳膊少腿,质量极其差,还不愿修改,曰:只是做一个演示系统,有数据就行了。他不知道他这样的数据给我,我们后面做得再好,最终的演示效果也不会好,他这样的随意,后面的人不知要多花多少时间来弥补。我也无意跟他多费口舌,自己挽起袖子重做了他的工作。 Continue reading

2016新年快乐

2015年过得好快,梳理一下,2015年的时间线大概是这样的:

3月来北京计算所做毕设→5月返回武大修改论文→5月30公开答辩→6月毕业季→7月回北京计算所→8月回家陪父母→9月国科大开学→持续高强度的学习→2016元旦还在图书馆研究NPC问题。

2015年给我的总体感受是很忙,但忙的事情都很琐碎,并没有什么大的里程碑事件,不过以下三件事情我认为值得一提。 Continue reading

读施一公博客有感

大家好,施一公老师的26篇博客大概可以分为四类:1)讲述个人生活经历2)评论社会问题3)讨论国家科技和人才引进政策4)介绍学习方法。这些博客比较全面的反应了施一公的求学经历、由学生到教授的转变过程以及回国之后为中国人才引进所做出的努力。

给我感触最深的有3点:1)环境对人的影响很大2)坚持总会有所收获3)做一个有担当、有社会责任感的科研人。 Continue reading

浮点数知识及Grisu算法介绍

进入研究生生涯完成的第一个新生培训作业是“2.5亿个浮点数的外部排序算法”,前后折腾了将近一个月,结果是在i7处理器上,限制512MB内存,排序用时250秒左右。

这个作业的常规思路大部分人都能想到,按块读取文件->atof转换为double->内部快速排序或基数排序->dtoa转换为char*->按块写入文件。这里面中间的三个过程都很耗时,特别是atof和dtoa,因为精度只要求保留9位小数,所以可以自己实现atof和dtoa来加速,也可以使用多线程加速。

整个作业都是基于对IEEE754浮点数的深刻理解展开的,所以下面详细讲解浮点数的一些知识。

IEEE754双精度浮点数

目前大多数CPU内浮点数的表示都遵循IEEE754标准,IEEE754双精度浮点数(double)表示如下图所示。

IEEE754 double在内存中的形式[1]
IEEE754 double在内存中的形式[1]
Continue reading

百度图片批量下载器(python3 + pyqt5 + eric6 + cx_Freeze4)

去年暑假在北大计算所实习的时候,任务之一就是批量下载百度图片。当时没学python,用c#实现了一个简易版本的批量下载器,如下图。

C#版本百度图片批量下载器(抓的是百度的wap站点,现在好像不能用了)

C#版本百度图片批量下载器(抓的是百度的wap站点,现在好像不能用了)

当时“时间紧,任务重“,既没仔细研究百度图片API,也没处理好界面线程阻塞的问题。这个问题其实很有意思,趁着暑假在家,实现了一个比较完美的python版本,先上效果图。

python3版本百度图片批量下载器

python3版本百度图片批量下载器

Continue reading