• [爬虫学习笔记]基于Bloom Filter的url去重模块UrlSeen


            Url Seen用来做url去重。对于一个大的爬虫系统,它可能已经有百亿或者千亿的url,新来一个url如何能快速的判断url是否已经出现过非常关键。因为大的爬虫系统可能一秒钟就会下载几千个网页,一个网页一般能够抽取出几十个url,而每个url都需要执行去重操作,可想每秒需要执行大量的去重操作。因此Url Seen是整个爬虫系统中非常有技术含量的一个部分。

            为了提高过滤的效率,我们使用有极低误判率但是效率非常高的算法——Bloom Filter,已经有高手写好了Bloom Filter的算法实现,我们这里就直接站在巨人的肩膀上直接使用他写好的类库啦。

            Nuget:

    Install-Package BloomFilter

    代码实现:

    using System;
    using BloomFilterDotNet;
    
    namespace Crawler.Processing
    {
        /// <summary>
        /// Url Seen用来做url去重。对于一个大的爬虫系统,它可能已经有百亿或者千亿的url,新来一个url如何能快速的判断url是否已经出现过非常关键。因为大的爬虫系统可能一秒钟就会下载几千个网页,一个网页一般能够抽取出几十个url,而每个url都需要执行去重操作,可想每秒需要执行大量的去重操作。因此Url Seen是整个爬虫系统中非常有技术含量的一个部分。
        /// </summary>
        public class UrlSeen
        {
            private BloomFilter<string> Seen { set; get; }
            public UrlSeen()
            {
                Seen = new BloomFilter<string>(1000000, 0.0001, null);
            }
            public UrlSeen(int targetCapacity, double falsePositiveRate)
            {
                Seen = new BloomFilter<string>(targetCapacity, falsePositiveRate, null);
            }
            public bool MatchUrl(Uri url)
            {
                return Seen.Contains(url.ToString());
            }
            public int Count
            {
                get { return Seen.Count; }
            }
            public void Add(Uri url)
            {
                Seen.Add(url.ToString());
            }
        }
    }
  • 相关阅读:
    Cesium视角
    Cesium删除特定的实体
    cesium之CLAMPED
    JavaScript:使用setAttribute()改变网页中标签的onclick属性
    atoi()函数及其实现
    寻找数组中的第二大数
    字符串函数之strcpy
    互换两个变量(不使用中间变量)
    寻找兄弟单词(2012.5.6百度实习)
    大数据量的存储分表常见算法(转)
  • 原文地址:https://www.cnblogs.com/WayneShao/p/5910857.html
Copyright © 2020-2023  润新知