手把手教你写网络爬虫(7):URL去重

开发 后端
本期我们来聊聊URL去重那些事儿。以前我们曾使用Python的字典来保存抓取过的URL,目的是将重复抓取的URL去除,避免多次抓取同一网页。

本系列:

[[230068]]

[[230069]]

IPv6编码地址数:2^128(约3.4×10^38)

IPv6是IETF设计的用于替代现行版本IP协议(IPv4)的下一代IP协议,号称可以为全世界的每一粒沙子编上一个网址。

[[230070]]

 

  1. public <T> boolean put(T object, Funnel<? super T> funnel, int numHashFunctions, BitArray bits) {  
  2.     long bitSize = bits.bitSize();  
  3.     long hash64 = Hashing.murmur3_128().hashObject(object, funnel).asLong();  
  4.     int hash1 = (int) hash64;  
  5.     int hash2 = (int) (hash64 >>> 32);   
  6.  
  7.     boolean bitsChanged = false 
  8.     for (int i = 1; i <= numHashFunctions; i++) {  
  9.         int combinedHash = hash1 + (i * hash2);  
  10.         // Flip all the bits if it's negative (guaranteed positive number)  
  11.         if (combinedHash < 0) {  
  12.             combinedHash = ~combinedHash;  
  13.         }  
  14.         bitsChanged |= bits.set(combinedHash % bitSize);  
  15.     }  
  16.     return bitsChanged;  
  17.  

 

  1. boolean set(long index) {   
  2.     if (!get(index)) {   
  3.         data[(int) (index >>> 6)] |= (1L << index);   
  4.         bitCount++;   
  5.         return true;   
  6.     }   
  7.     return false;   
  8. }     
  9.   
  10. boolean get(long index) {   
  11.     return (data[(int) (index >>> 6)] & (1L << index)) != 0;   
  12. }   

02 先get()一下,看看是不是已经置为1。 

03 index右移6位就是除以64,说明data是long型的数组,除以64就定位到了bit所在的数组下标。1L左移index位,定位到了bit在long中的位置。 

责任编辑:庞桂玉 来源: Python开发者
相关推荐

2018-05-16 15:46:06

Python网络爬虫PhantomJS

2018-05-16 13:50:30

Python网络爬虫Scrapy

2018-05-22 15:30:30

Python网络爬虫分布式爬虫

2018-05-14 15:27:06

Python网络爬虫爬虫架构

2018-05-14 16:34:08

Python网络爬虫Scrapy

2018-05-14 14:02:41

Python爬虫网易云音乐

2020-07-10 08:24:18

Python开发工具

2023-03-27 08:28:57

spring代码,starter

2021-01-30 10:37:18

ScrapyGerapy网络爬虫

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印机

2021-07-14 09:00:00

JavaFX开发应用

2021-11-09 09:01:36

Python网络爬虫Python基础

2021-04-01 09:02:38

Python小说下载网络爬虫

2011-02-22 13:46:27

微软SQL.NET

2021-12-28 08:38:26

Linux 中断唤醒系统Linux 系统

2021-02-26 11:54:38

MyBatis 插件接口

2021-07-09 17:27:58

ButterKnife工具APT

2021-06-22 10:43:03

Webpack loader plugin

2021-09-01 14:49:48

curl2pypython工具
点赞
收藏

51CTO技术栈公众号