前言
由于业余爱好,想折腾一个垂直搜索引擎来玩玩,一方面想搞明白这里的水有多深(确实很深),另一方面满足自己的需要,去博客园,CSDN怕一些好文章来把玩把玩。从断断续续的玩了一个月的情况来看,有些成果,但是技术难点还在后见面。我也会不间断的补充完善,估计至少还需要1年的时间吧。如果你也希望能和我一起探索,请锁定本系列。但是你也无可避免的会和我一起走许多弯路(哈哈,被坑了吧),但是我所走的捷径,一样也会成为你的捷径。祝咱们成功!
这是本项目的svn地址(记得随时更新):http://my-crawler-engine.googlecode.com/svn/trunk/
跟随本系列,你需要如下的技能:
- 1. 熟悉C++0x标准
- 2. 善于利用C++模板进行抽象
- 3. 熟悉同步、异步、阻塞、非阻塞概念(不熟悉的同学请到这里)
- 4. 熟悉基本的HTTP协议(这里可以帮你释疑)
- 5. 熟悉正则表达式(自己google吧)
如果你想了解一下技术(恭喜,我们是一条道上的):
- 1. 异步HTTP
- 2. 正文提取算法(去噪)
- 3. 多媒体(PDF、WORD)资源的抽取
4. web数据图
5. 网页内容去重
6. 分类与聚类
7. 索引库设计实现
8. http服务器设计实现
如果你有以下特征之一,可能会带给你不适,请谅解:
- 1. 天然喷
- 2. 反车轮党
- 3. 反模板联盟
目标
本系列完成后需要达成的目标:
- 可伸缩性,在增加额外的资源后提高爬取质量
- 性能,能有效利用克重系统资源,CPU,Disk I/O, Network I/O
- 质量,爬虫优先抓去有用的网页
- 新鲜性,持续运行,而且不只是怕取一次
- 更新,对经常更新的页面进行重新抓取
- 可扩展性,能够支持新的数据格式和新的抓取协议
简介
垂直搜索是针对一个行业的专业搜索,例如生活信息,商品价格,专业博客等等。详情可以参看百度百科。可以看到,垂直搜索的应用面是相当广泛的。
需要的技术:
- 定向的网络爬虫
- 网页结构化信息抽取
- 中文分词,全文检索
- 信息处理
这是爬虫的结构图
这是wiki上对爬虫的结构剖析图,在这里,重新更新详细的分解下,爬虫会包括以下几个模块:
- 1. 下载(对web网页的下载)
- 2. 分析(分析网页中包含的有效信息及其他链接)
- 3. 处理(把有效内容进行保存,入库)
- 4. 调度器(统筹,对下载、分析、处理进行异步运行,调度)
信息处理模块、搜索模块目前没了解,暂不上图
核心模块及技术难点介绍:
1. 需要处理的URL队列
2. 异步HTTP
3. 正文分析匹配算法
4. 数据库设计
5. 多媒体抽取
6. 网页去噪
7. 分类聚类
8. 中文分词(oh, my god!)
9. 索引库
10. 搜索界面