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

news/2024/7/19 11:15:23 标签: 爬虫

        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());
        }
    }
}

转载于:https://www.cnblogs.com/WayneShao/p/5910857.html


http://www.niftyadmin.cn/n/1291449.html

相关文章

添加字段_批量添加字段标题

↑↑↑点击上方图片&#xff0c;了解详情批量添加字段标题&#xff0c;分享示例源码。在实际开发过程中&#xff0c;在表设计阶段一般表中的字段名称都使用英文命名&#xff0c;针对中文环境的用户实际使用软件的时候需要看到的是中文名称&#xff0c;通常我们会在字段的标题属…

jQuery的简单入门练习

1 <html>2 <head>3 <meta charset"utf-8">4 <title>jQuery的练习</title>5 <script src"jquery.js"></script>6 7 <script language"javascript">8 $("document").ready(functio…

时间组件选择一个时间段_今日头条选择时间段组件封装(开箱即用)

今日头条选择时间段组件封装你可能看到或是使用过今日头条的选择时间段组件&#xff0c;什么&#xff0c;你没有用过&#xff0c;请先看图线上演示地址&#xff1a;andt-components先解释一下选择器功能组件一周时段可选&#xff0c;没半个小时一个粒度&#xff0c;可以连续选择…

apiCloud中的数据库操作mcm-js-sdk的使用

1.引入js <!-- 引入mcm-js-sdk Begin --> <script type"text/javascript" src"../plugin/mcm-js-sdk/APICloud-rest-SHA1.js"></script> <script type"text/javascript" src"../plugin/mcm-js-sdk/APICloud-rest.js&q…

CXF支持 SOAP1.1 SOAP1.2协议

SOAP协议分为两个版本 1.1 1.2 默认支持1.1 实现方式&#xff1a; 1.编写接口 import javax.jws.WebService;WebService public interface ISerivceTest {String sayHello(String name); } 2.编写实现方式 import javax.jws.WebService; import javax.xml.ws.BindingType; impo…

学校监控日常检查记录表格_【第63期】校园资讯(2)教研检查活动简报

2020年11月27日&#xff0c;为加强教学质量的监控&#xff0c;进一步促进教学常规工作的规范化建设&#xff0c;监利市教研室领导莅临我校&#xff0c;对我校的教研教学工作进行了检查。‍学校教务处将各年级各学科的常规教学资料放在会议室等候检查。本次检查的内容包括授课计…

有了深度学习,传统的机器学习算法没落了吗,还有必要去学习吗?

深度学习在最近两年非常火爆&#xff0c;它迅速地成长起来了&#xff0c;并且以其疯狂的实证结果着实令我们惊奇。 但深度学习是否真的就取代了传统或者其他机器学习算法了呢&#xff1f;那么&#xff0c;传统的机器学习还有必要去学习吗&#xff1f; 首先来看一位同学的心得&a…

css @media diaplay:block失效_CSS-布局与定位

首先回顾一下上一篇中的最后效果展示现在我们继续往后做首先看一下最终效果图先来做一个背景图吧第一步&#xff1a;下载原图&#xff08;或者可以自己设置想要的背景图&#xff09;在resume文件夹中创建一个新的文件夹img&#xff0c;专门用来存放需要用到的图片&#xff0c;将…