<commit_before>---
layout: post
title: 爬虫采集去重优化浅谈
subtitle: 2017/11/09
date: 2017-11-09
author: FR
header-img: img/depot/post-butiao.jpg
catalog: true
tags:
    - 爬虫
---

- **来自FreeBuf [【FreeBuf链接】](http://www.freebuf.com/articles/others-articles/151173.html)**  

以前在做漏洞Fuzz爬虫时，曾做过URL去重相关的工作，当时是参考了seay法师的文章以及网上零碎的一些资料，感觉做的很简单。近来又遇到相关问题，于是乎有了再次改进算法的念头。

首先，针对URL本身的去重，可以直接对整块URL进行处理。在参考网上的一些文章时，发现它们大多采用了 URL 压缩存储的方法。不过使用这些算法在数据量较大的时候，能大幅减小存储的空间：

![img/2017-11-09/15083896142390.png](http://image.3001.net/images/20171019/15083896142390.png)

    基于磁盘的顺序存储。
    基于Hash算法的存储。
    基于MD5压缩映射的存储。
    基于嵌入式Berkeley DB的存储。
    基于布隆过滤器（Bloom Filter）的存储。<commit_msg>Update 2017-11-09-02-爬虫采集去重优化浅谈.md<commit_after>---
layout: post
title: 爬虫采集去重优化浅谈
subtitle: 2017/11/09
date: 2017-11-09
author: FR
header-img: img/depot/post-butiao.jpg
catalog: true
tags:
    - 爬虫
---

- **来自FreeBuf [【FreeBuf链接】](http://www.freebuf.com/articles/others-articles/151173.html)**  

以前在做漏洞Fuzz爬虫时，曾做过URL去重相关的工作，当时是参考了seay法师的文章以及网上零碎的一些资料，感觉做的很简单。近来又遇到相关问题，于是乎有了再次改进算法的念头。

首先，针对URL本身的去重，可以直接对整块URL进行处理。在参考网上的一些文章时，发现它们大多采用了 URL 压缩存储的方法。不过使用这些算法在数据量较大的时候，能大幅减小存储的空间：

![img/2017-11-09/15083896142390.png](http://image.3001.net/images/20171019/15083896142390.png)

    基于磁盘的顺序存储。
    基于Hash算法的存储。
    基于MD5压缩映射的存储。
    基于嵌入式Berkeley DB的存储。
    基于布隆过滤器（Bloom Filter）的存储。

对于 URL 直接去重，主要涉及的是存储优化方面，对于本文不是重点，这里不再细说。

* 而对于 URL 逻辑上的去重，则需要更多地追求数据的可用性，这是做测试工作需要去考量的。

这里先给出 seay 文章中的相似度去重算法，大致是下面这样的：
{'fraction_non_alphanumeric': 0.1287465940054496, 'fraction_numerical': 0.10354223433242507, 'mean_word_length': 5.5, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '132188', 'n_tokens_mistral': 1081, 'n_tokens_neox': 1096, 'n_words': 71}