用户登录
个人主页 用户中心 我的订单 添加授权 管理授权
退出登录
用户登录 用户注册
欢迎来到 UC建站系统

批量去重不是点一下删除重复行就完事,你手里的URL列表、关键词库、域名清单至少藏了3种不同的重复

做SEO的人电脑里都有几个"祖传"txt文件——从各种渠道扒下来的URL列表、关键词词库、域名清单,少则几千行,多则几十万行。打开一看,一眼就能发现一堆重复行,但真正让人头疼的不是那些完全一样的行,而是长得差不多但实际上不同的"半重复"。同一个URL后面带了不同参数、同一个关键词换了词序、同一个域名带着不同路径——这些你用Excel"删除重复行"根本清不掉。

去重的三个层次,大部分人只用到了第一层

1完全重复:两行内容一模一样,Excel能搞定
2按字段去重:两行不完全一样,但某个关键字段相同就算重复,比如同一域名下的不同URL
3相似度去重:文本相似度超过某个阈值就算重复,比如"深圳装修多少钱一平"和"深圳装修一平米多少钱"

一、完全重复:在线工具一行代码都不用写

如果只是去重完全相同的行,现在在线工具的体验已经非常成熟了。把内容粘贴进去,点一下按钮,几万行数据秒级去完。常用的几款我做了个对比:

工具最大处理量特色功能适合场景
UU在线工具50万行自定义分隔符、导出txt大批量关键词/URL列表
selfboot文本去重30万行去空行、大小写敏感、排序输出需要保留顺序的关键词库
GenTools20万行上传文件+保留首次/末次需要保留特定出现位置的场景
ToolKun10万行忽略空格、忽略大小写格式不规范的文本清洗
49Tool10万行站长工具箱集成、批量打开网址站长日常运维用

这几款工具对"完全重复"的处理都很靠谱,选哪个主要看数据量。10万行以内随便用,超过30万行建议用UU在线工具,它的处理上限最高,而且支持自定义分隔符,数据格式不标准的时候能救命。

一个容易被忽略的细节:去重前先检查有没有空行和首尾空格。很多工具默认"带空格的相同文本"不算重复,比如"深圳装修"和"深圳装修 "(末尾多了个空格)会被当成两条不同数据保留下来。绝大多数在线工具都有"去除首尾空格"的选项,去重之前勾上。

1 - 批量去重不是点一下删除重复行就完事,你手里的URL列表、关键词库、域名清单至少藏了3种不同的重复 - UC建站系统

二、按字段去重:同一个域名的URL只留一条

这是站长的刚需场景。你扒了一个竞争对手的外链列表,里面有2000条URL,但很多URL来自同一个域名——www.example.com/page1、www.example.com/page2、www.example.com/page3……你的目标不是按完整URL去重,而是按主域名去重,每个域名只保留一条URL。这种需求在线工具能解决的就不多了。

UU在线工具提供了一个"按域名去重"功能,粘贴URL列表后自动提取主域名,每个域名只保留第一条链接。如果需求刚好匹配,这个工具足够用了。但如果你的规则更复杂——比如想按二级域名去重、或者想保留每个域名下收录最多的那条URL——那就要上Python了。

from urllib.parse import urlparsefrom collections import defaultdict# 按主域名去重,每个域名只保留一条URLdef dedup_by_domain(url_list):domain_map = {}for url in url_list:domain = urlparse(url).netloc  # 提取主域名if domain not in domain_map:domain_map[domain] = urlreturn list(domain_map.values())# 读取文件with open('urls.txt', 'r', encoding='utf-8') as f:urls = [line.strip() for line in f if line.strip()]result = dedup_by_domain(urls)with open('urls_deduped.txt', 'w', encoding='utf-8') as f:for url in result:f.write(url + '\n')print(f"原始URL: {len(urls)} 条")print(f"去重后: {len(result)} 个独立域名")

这个脚本的逻辑很简单:遍历每条URL,用urlparse提取域名部分,用字典的key天然去重特性保证每个域名只存一条。如果需要更灵活的规则——比如想保留每个域名下路径最短的那条URL(首页链接最干净),把字典的赋值逻辑改成按路径长度比较就行。

URL列表去重

在线工具做完全重复就够了。按域名去重用Python脚本,按路径去重可以用正则匹配URL前缀。

关键词库去重

完全重复用在线工具。但要小心"深圳装修""装修深圳""深圳装修公司"这种语义相近的词——Excel和在线工具都搞不定,得上模糊匹配。

域名清单去重

最常用的场景:去重后统计独立域名数。注意www和非www版本是不是算同一个域名,你的规则要先定清楚。

邮箱/手机号去重

完全重复用在线工具。额外注意格式标准化:手机号去86前缀、邮箱去点号变体(g.mail和gmail是同一个邮箱)。

三、相似度去重:长得像但不是一模一样的东西怎么筛

这是去重里最难的一层,也是真正能帮你省时间的。场景是这样的:你从5118、百度下拉框、相关搜索、Google Keyword Planner四个渠道采了1万条关键词,合在一起发现很多词换了个顺序就重了——"深圳装修公司哪家好"和"深圳哪家装修公司好",字都一样就是顺序不一样。纯文本去重完全识别不了这种重复。

解决这个问题需要用到模糊匹配。Python里最常用的库是fuzzywuzzy(现在叫thefuzz),核心思路是计算两段文本的相似度分数,超过阈值就判定为重复。

from thefuzz import fuzz# 关键词相似度去重,阈值85分def fuzzy_dedup(keywords, threshold=85):unique = []for kw in keywords:is_dup = Falsefor existing in unique:# token_sort_ratio会先分词排序再比较,无视词序差异if fuzz.token_sort_ratio(kw, existing) >= threshold:is_dup = Truebreakif not is_dup:unique.append(kw)return unique# 示例keywords = ["深圳装修公司哪家好","深圳哪家装修公司好","北京装修公司推荐","深圳装修公司排名"]result = fuzzy_dedup(keywords, threshold=85)print(f"去重前: {len(keywords)} 条")print(f"去重后: {len(result)} 条")

token_sort_ratio的工作原理是先把两个字符串分别拆成词,然后分别排序,再比较排序后的结果。所以"深圳装修公司哪家好"和"深圳哪家装修公司好"分词排序后都会变成类似["好","哪家","深圳","公司","装修"]的序列,相似度能到90分以上。这就是为什么它能无视词序差异。

阈值怎么定?

2 - 批量去重不是点一下删除重复行就完事,你手里的URL列表、关键词库、域名清单至少藏了3种不同的重复 - UC建站系统

· 95分以上:基本就是同一个词换了顺序,直接去重,误杀率极低
· 85-95分:大概率是同一个搜索意图的不同表达,建议保留一条,手动抽查
· 75-85分:可能有语义重叠但也可能是不同需求,不建议自动去重,标注出来人工判断
· 75分以下:基本是不同的词,不去重

模糊去重有个性能问题需要注意:fuzzywuzzy的算法是O(n²),1万条关键词两两比较就是一亿次计算,纯Python跑完要好几分钟。如果数据量超过5000条,建议先用完全去重把数据量压下来,再做模糊去重,或者用rapidfuzz替代fuzzywuzzy——它是C++实现,同样的算法快5-10倍。

四、Excel去重:多数人只用到了它10%的能力

Excel的"删除重复项"是最常用的去重方式,但它有好几个使用层次,大部分人只停留在第一层:选中所有列→删除重复项→整行去重。实际上Excel的去重能力远不止于此。

去重方式操作路径适用场景局限性
整行去重数据 → 删除重复项 → 全选列完全相同的行只能删完全一致的,一个空格差异就认不出
指定列去重数据 → 删除重复项 → 只勾选关键列按域名/手机号/ID等关键字段去重保留的是第一次出现的行,不能自定义保留哪条
高级筛选数据 → 高级 → 选择不重复的记录不想删原数据,只想提取唯一值处理速度比删除重复项慢
Power Query数据 → 从表格 → 右键列 → 删除重复项大量数据+跨表处理+需要保留处理步骤需要一点Power Query基础
COUNTIF标记=IF(COUNTIF($A$2:A2,A2)=1,"保留","重复")需要看到每次重复出现的情况,而不是直接删公式拖拽在大数据量下会卡

Power Query是Excel里被严重低估的去重工具。它的核心优势不是去重本身,而是去重过程可追溯——每一步操作都会被记录成一个步骤,下次打开文件刷新一下就能自动重新执行整个清洗流程。如果你的去重工作是周期性的(比如每周要处理一批新的外链列表),用Power Query建一个清洗模板,比每次手动操作省太多时间。

五、百万级数据怎么去重——在线工具和Excel都扛不住了

当你手里的数据超过100万行时,在线工具会崩、Excel会卡死、Python的内存也可能爆。这时候就要换思路了。

在线工具上限

50万行

UU在线工具最高承载

Excel上限

104万行

实际50万行就开始卡

Python pandas上限

内存/3倍

8G内存约处理500万行

3 - 批量去重不是点一下删除重复行就完事,你手里的URL列表、关键词库、域名清单至少藏了3种不同的重复 - UC建站系统

分块处理方案

无上限

chunksize分块读取

处理百万级以上数据的核心策略是分块读取 + 逐批去重。pandas的read_csv支持chunksize参数,每次只读10万行到内存,去重后再读下一批。最终把所有分块结果合并再做一次全局去重。

import pandas as pd# 分块去重:每次读10万行,合并后全局去重chunks = []for chunk in pd.read_csv('huge_data.csv', chunksize=100000):# 先做块内去重chunk = chunk.drop_duplicates()chunks.append(chunk)# 合并所有块df = pd.concat(chunks, ignore_index=True)# 跨块全局去重df = df.drop_duplicates()print(f"去重后剩余: {len(df)} 行")df.to_csv('deduped_data.csv', index=False)

如果连分块都撑不住(比如数据有几千万行),就需要上数据库方案了。把数据导入SQLite或者MySQL,建唯一索引,重复数据在导入阶段就会被自动过滤掉。这是处理超大规模数据的终极方案。

一个省时间的思路:如果你是在做站群内容管理,与其每次手动去重关键词和URL列表,不如用UC建站系统的内容中台统一管理。系统内置了去重和差异化重组机制,不同站点发布的内容会自动做角度和结构上的区分,不会出现多个站发一模一样内容的问题。手工去重花的时间,放在系统层面只需要设置一次规则。

六、去重时最容易犯的三个错

错法一:不检查就去重

去重前至少做两件事:看一眼原始数据的格式是否统一(有没有编码问题导致的乱码重复、有没有换行符不一致)、确认一下"重复"的定义是什么(完全匹配?按某列?相似度多少分?)。别上来就点删除重复项,删完发现规则错了还得重新来。

错法二:去重后不统计损失

去重完成后一定要看两个数字:原始数据量、去重后数据量。如果去掉了超过50%的数据,说明数据源有问题或者采集规则有缺陷,不是数据本身的错。如果只去掉了不到5%,要么数据质量很好,要么你的去重规则太松了,可能有漏网之鱼。建议每次去重后随机抽20条结果人工看一下。

错法三:模糊去重阈值一刀切

所有数据都用同一个阈值(比如85分)去模糊去重是有风险的。短文本(10字以内)相似度容易偏高,阈值可以设高一点(90分以上)。长文本(50字以上)相似度容易偏低,阈值可以降到80分。不同长度的数据用不同的阈值,能减少误杀和漏网。

批量去重这件事,说穿了就是一个"定义"问题。你先把"什么叫重复"定义清楚了,工具的选择就水到渠成。完全相同的行用在线工具,按字段去重用Python脚本,相似度去重用模糊匹配,百万级以上用分块或数据库。别一上来就钻技术细节,先想清楚你的数据里到底什么是重复,再去选对应的武器。

相关推荐
在线客服
👇找客服拿折扣
QQ咨询&售后
在线时间
11:00 ~ 5:30
QQ:3155555535
👇联系QQ
👇联系WX
首页 程序 帮助 登录