文档介绍:1网页的收集(2)李晓明,2003年10月参考《Mining the Web》2Global Picture?收集(爬取,crawling)?批量(batch)还是增量(incremental)??整理?净化(purification),打分,切词?服务?倒排索引(inverted index,含位置信息与否)?字面匹配,概念匹配?静态摘要还是动态摘要??排序3大规模爬取器的一种结构图4大规模爬取器:性能和可靠性问题?同时并发抓取多个网页(例如一台机器200个并发)?这是充分利用网络带宽的基础?避免让DNS查询成为瓶颈?利用异步sockets(Soumen的观点)?用一个数据结构,显式将一个抓取过程的状态表达出来?检查结束标志?多进程、多线程:漂亮但不实用?URL提取中的问题?消除重复,减少冗余的抓取(不那么容易,同义URL问题)?避免“spider traps”,陷入少量网站中5DNS缓存,预取和解析?如果不采取措施,DNS地址解析会成为一个重要的瓶颈?局域网中,DNS服务器通常较小,对付几百个工作站的常规操作没问题,但一个crawler产生的压力大很多?避免同时从一个服务器抓许多网页也使DNS的cache能力发挥不出来(破坏了locality)?搜索引擎中可以设计一个专用的DNS模块,含有?用于地址解析的DNS client(和本模块的DNS缓存服务器打交道)?缓存server?预取client6用于高效地址解析的定制client?一般系统(例如UNIX)提供的DNS client没有考虑cralwer的需求,带来两个问题:?以gethostbyname()为基础,它不能并发;?不会考虑在多个DNS server之间分配负载。?因此一个custom client很必要。?专门对付多个请求的并发处理?容许一次发出多个解析请求?通过polling来看请求的完成情况?协助在多个DNS server之间做负载分配(例如根据掌握的URL进行适当调度)7缓存服务器(DNS Caching Server)?大缓存容量,跨DNS系统的刷新保持内容?的DNS系统会定期刷新,交换更新的域名和IP的信息。?普通的DNS cache一般应该尊重上级DNS服务器带来的域名“过期”的信息,但用于爬取网页的DNS cache不一定如此,以减小开销(让缓存中有些过期的无所谓,但也要注意安排适时刷新)?映射尽量放在内存,可以考虑用一台专门的PC8预取client?为了减少等待查找涉及新主机的地址的时间:尽早将主机名投给DNS系统?步骤?分析刚得到的网页?从HREF属性中提取主机名(不是完整的URL)?向缓存服务器提交DNS解析请求?结果放到DNS cache中(后面可能有用,也可能用不上)?通常用UDP实现?非连接,基于包的通信协议,不保证包的投递?用不着等待解析的完成910多个并发的抓取?管理多个并发的连接?单个下载可能需要几秒钟?同时对不同的HTTP服务器建立许多socket 连接?过多的硬件并行好处不大?爬取的性能瓶颈主要在网络和硬盘?两种基本方法?用多线程?用带事件处理的非阻塞sockets