zoukankan      html  css  js  c++  java
  • 爬虫程序判断是否已抓URL

    http://www.cnblogs.com/yuandong/archive/2008/08/28/Web_Spider_Url_Index.html

    看了这篇文章后的灵感,不过他是用C++实现的,我是用C#实现。。不说那么多,帖代码了。。

    判断URLIdentity类,用于对已抓取的URL进行标识,判断URL是否已抓取

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    using System.Security.Cryptography;

    namespace TestMD5
    {
        
    public class URLIdentity
        {
            
    private BitArray []SegmentArray = new BitArray[4096];

            
    private int GetSegmentIndex(int hashValue)
            {
                
    return hashValue / 25000;
            }

            
    private int GetSegmentOffset(int hashValue)
            {
                
    return hashValue % 25000;
            }

            
    public int GetIntHashCode(string url)
            {
                
    byte[] tmpByte;
                MD5 md5 
    = new MD5CryptoServiceProvider();
                tmpByte 
    = md5.ComputeHash(Encoding.Default.GetBytes(url));
                StringBuilder sb 
    = new StringBuilder();
                
    for (int i = 0; i < tmpByte.Length; i++)
                {
                    sb.Append(tmpByte[i]);
                }
                
    string temp = sb.ToString().Substring(08); 
                
    return Int32.Parse(temp);
            }

            
    public void SetUrlIndentity(string url)
            {
                
    int HashNum = GetIntHashCode(url);
                
    int SegIndex = GetSegmentIndex(HashNum);
                
    int SegOffset = GetSegmentOffset(HashNum);

                
    if (SegmentArray[SegIndex] == null)
                {
                    SegmentArray[SegIndex] 
    = new BitArray(25000);
                }

                SegmentArray[SegIndex][SegOffset] 
    = true;
            }

            
    public bool GetUrlIdentity(string url)
            {
                
    int HashNum = GetIntHashCode(url);
                
    int SegIndex = GetSegmentIndex(HashNum);
                
    int SegOffset = GetSegmentOffset(HashNum);

                
    if (SegmentArray[SegIndex] == null)
                {
                    
    return false;
                }
                
    else
                {
                    
    return SegmentArray[SegIndex][SegOffset];
                }
            }
        }
    }

    DEMO:

    Code
  • 相关阅读:
    【SpringFramework】Spring 事务控制
    Mini 学生管理器
    方法的重写override,重载overload。
    方法封装,属性调用以及设置。
    判断hdfs文件是否存在
    模拟(删除/远程拷贝)当前一周的日志文件
    2.上传hdfs系统:将logs目录下的日志文件每隔十分钟上传一次 要求:上传后的文件名修为:2017111513xx.log_copy
    使用定时器:在logs目录,每两分钟产生一个文件
    五个节点的hadoop集群--主要配置文件
    hadoop集群配置文件与功能对应解析
  • 原文地址:https://www.cnblogs.com/coolkiss/p/1517460.html
Copyright © 2011-2022 走看看