Crawler学习:4.Improve Performance

声明:所有内容均为本人学习《 自己动手写网络爬虫 》心得,有任何疑问可以参考原文。

提高爬虫的表现性涉及到很多方面。
针对不同的需求设计相应的爬虫队列以及爬行的策略,是各大搜索引擎的核心竞争力。
在此只针对之前的简单爬虫进行分析。


1.Url压缩
通常我们获得Url为较长的字符串,并将其作为key来进行存储查找匹配。
为了提高匹配效率及节省存储空间,首先得到Url时可以进行压缩,比如MD5。


2.使用数据库作为爬虫队列
爬虫队列的设计是网络爬虫的关键。爬虫队列是用来保存URL 的队列数据结构的。
在大型爬虫应用中,构建通用的、可以扩缩的爬虫队列非常重要。
数以十亿计的URL 地址,使用内存的链表或者队列来存储显然不够。

因此,需要找到一种数据结构,这种数据结构具有以下几个特点:

1.能够存储海量数据,当数据超出内存限制的时候,能够把它固化在硬盘上。

2.存取数据速度非常快。

3.能够支持多线程访问

选择一个可以进行线程安全、使用Hash 存储,并且能够应对海量数据的内存数据库,是存储URL 最合适的数据结构。
文章中选择Oracle 公司开发的内存数据库产品Berkeley DB。


3.Visited表
在得到url后,我们需要判断这个url是否存在于visited表中。
一般来讲,计算机中的集合是用哈希表(Hash Table)来存储的。
它的好处是快速而准确,缺点是费存储空间。当集合比较小时,这个问题不显著。
但是当集合巨大时,哈希表存储效率低的问题就显现出来了。
比如说,一个像Yahoo、Hotmail 和Gmail 那样的公众电子邮件(E-mail)提供商,总是需要过滤来自发送垃圾邮件的人(spamer)的垃圾邮件。
一个办法就是记录下那些发垃圾邮件的E-mail 地址。
由于那些发送者不停地在注册新的地址,全世界少说也有几十亿个发垃圾邮件的地址,将它们都存起来则需要大量的网络服务器。
如果用哈希表,每存储一亿个E-mail 地址,就需要1.6GB 的内存。
(用哈希表实现的具体办法是将每一个E-mail 地址对应成一个八字节的信息指纹, 然
后将这个信息指纹存入哈希表,由于哈希表的存储效率一般只有50%,因此一个E-mail 地
址需要占用十六个字节。一亿个地址大约要1.6GB,即十六亿字节的内存)
因此存储几十亿个邮件地址可能需要上百GB 的内存。除非是超级计算机,一般服务器是无法存储的。
一种称作布隆过滤器的数学工具,它只需要哈希表1/8 到1/4 的大小就能解决同样的问题。
具体算法过程见原文。


除此之外,针对不同的环境还会有不同提升性能的方法。
如设计并行爬虫,根据url设置爬行优先级,设置反防爬策略,采取更高效的语言实现等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值